Простейший 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