Простейший 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д