Простейший Bubble sort не работает, где ошибка? - C (СИ)
Формулировка задачи:
Добрый день. Есть код, там считываются числа из файла, записываются в массив, сортируются по возрастанию и убыванию и это выводится на экран. Например, когда 10 чисел в файле (10 3 2 4 5 7 6 9 8 1), выводит такое:
Descending:
10 9 8 7 6 5 4 3 2 1 0 // Откуда тут 0?
Ascending:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 // 90 нулей аж!
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9
Ситуация чуть лучше, но неудовлетворительно все равно.
На выводе дает такое:
Descending:
10 9 8 7 6 5 4 3 2 // пропала 1, в розыск её! )
Ascending:
1 2 3 4 5 6 7 8 9 // пропала 10, её тоже в розыск! )
Однако, сути не меняет.
На выводе:
Descending:
10 9 8 7 6 5 4 3 2 1 // Работает!
Ascending:
0 1 2 3 4 5 6 7 8 9 // Появился 0, и все еще отсутствует 10.
#include <stdio.h> #include <stdbool.h> #define MAX_SIZE 100 #define TRUE 1 #define FALSE 0 void descendingBubble(int a[], int size1) { int x, m, temp1; bool boo; for (m = 0; m < size1 - 1; m++) { boo = FALSE; for (x = 0; x < size1 - m - 1; x++) { if (a[x] > a[x+1]) { temp1 = a[x]; a[x] = a[x+1]; a[x+1] = temp1; boo = TRUE; } } printf("%d ", a[x]); if (boo != TRUE) break; } } void ascendingBubble(int b[], int size2) { int y, n, temp2; bool bo; for(n = 0; n < size2 - 1; n++) { bo = FALSE; for (y = 0; y < size2 - n - 1; y++) { if (b[y] < b[y+1]) { temp2 = b[y]; b[y] = b[y+1]; b[y+1] = temp2; bo = TRUE; } } printf("%d ", b[y]); if (bo != TRUE) break; } } int main (void) { int array[MAX_SIZE] = {0}; FILE *fp1; int j, k; int i = 0; int temp = 0; int temp0 = 0; if ((fp1 = fopen("input.txt", "r")) == NULL) { printf("input.txt file not found.\n"); return 1; } else { while((fscanf(fp1, "%d", &array[i])) != EOF) { i++; } } for(k = 0; k < MAX_SIZE; k++) { temp0++; temp++; } printf("Descending:"); printf("\n"); descendingBubble(array, temp0); printf("\n"); printf("Ascending:"); printf("\n"); ascendingBubble(array, temp); printf("\n"); //printf("%d\n", temp); return 0; }
Заменил с 64 по 67 строку на такую:
for(k = 0; k < MAX_SIZE; k++) { if (array[k] == 0) { break; } else { temp0++; temp++; } }
Забыл вписать
fclose(fp1);
К счетчику к процедуре добавил по 1:
descendingBubble(array, temp0 + 1); ascendingBubble(array, temp + 1);
Решение задачи: «Простейший Bubble sort не работает, где ошибка?»
textual
Листинг программы
temp = MAX_SIZE - 1
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д