Простейший 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
#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++;
            }
    }
Ситуация чуть лучше, но неудовлетворительно все равно. На выводе дает такое: Descending: 10 9 8 7 6 5 4 3 2 // пропала 1, в розыск её! ) Ascending: 1 2 3 4 5 6 7 8 9 // пропала 10, её тоже в розыск! )
Забыл вписать
fclose(fp1);
Однако, сути не меняет.
К счетчику к процедуре добавил по 1:
descendingBubble(array, temp0 + 1);
ascendingBubble(array, temp + 1);
На выводе: Descending: 10 9 8 7 6 5 4 3 2 1 // Работает! Ascending: 0 1 2 3 4 5 6 7 8 9 // Появился 0, и все еще отсутствует 10.

Решение задачи: «Простейший Bubble sort не работает, где ошибка?»

textual
Листинг программы
temp = MAX_SIZE - 1

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5
Похожие ответы