Простейший 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
Листинг программы
  1. #include <stdio.h>
  2. #include <stdbool.h>
  3. #define MAX_SIZE 100
  4. #define TRUE 1
  5. #define FALSE 0
  6. void descendingBubble(int a[], int size1) {
  7. int x, m, temp1;
  8. bool boo;
  9. for (m = 0; m < size1 - 1; m++) {
  10. boo = FALSE;
  11. for (x = 0; x < size1 - m - 1; x++) {
  12. if (a[x] > a[x+1]) {
  13. temp1 = a[x];
  14. a[x] = a[x+1];
  15. a[x+1] = temp1;
  16. boo = TRUE;
  17. }
  18. }
  19. printf("%d ", a[x]);
  20. if (boo != TRUE) break;
  21. }
  22. }
  23. void ascendingBubble(int b[], int size2) {
  24. int y, n, temp2;
  25. bool bo;
  26. for(n = 0; n < size2 - 1; n++) {
  27. bo = FALSE;
  28. for (y = 0; y < size2 - n - 1; y++) {
  29. if (b[y] < b[y+1]) {
  30. temp2 = b[y];
  31. b[y] = b[y+1];
  32. b[y+1] = temp2;
  33. bo = TRUE;
  34. }
  35. }
  36. printf("%d ", b[y]);
  37. if (bo != TRUE) break;
  38. }
  39. }
  40.  
  41. int main (void) {
  42. int array[MAX_SIZE] = {0};
  43. FILE *fp1;
  44. int j, k;
  45. int i = 0;
  46. int temp = 0;
  47. int temp0 = 0;
  48. if ((fp1 = fopen("input.txt", "r")) == NULL) {
  49. printf("input.txt file not found.\n");
  50. return 1;
  51. }
  52. else {
  53. while((fscanf(fp1, "%d", &array[i])) != EOF) {
  54. i++;
  55. }
  56. }
  57. for(k = 0; k < MAX_SIZE; k++) {
  58. temp0++;
  59. temp++;
  60. }
  61. printf("Descending:");
  62. printf("\n");
  63. descendingBubble(array, temp0);
  64. printf("\n");
  65. printf("Ascending:");
  66. printf("\n");
  67. ascendingBubble(array, temp);
  68. printf("\n");
  69. //printf("%d\n", temp);
  70. return 0;
  71. }
Заменил с 64 по 67 строку на такую:
Листинг программы
  1. for(k = 0; k < MAX_SIZE; k++) {
  2. if (array[k] == 0) {
  3. break;
  4. }
  5. else {
  6. temp0++;
  7. temp++;
  8. }
  9. }
Ситуация чуть лучше, но неудовлетворительно все равно. На выводе дает такое: Descending: 10 9 8 7 6 5 4 3 2 // пропала 1, в розыск её! ) Ascending: 1 2 3 4 5 6 7 8 9 // пропала 10, её тоже в розыск! )
Забыл вписать
Листинг программы
  1. fclose(fp1);
Однако, сути не меняет.
К счетчику к процедуре добавил по 1:
Листинг программы
  1. descendingBubble(array, temp0 + 1);
  2. 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
Листинг программы
  1. temp = MAX_SIZE - 1

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


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

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

14   голосов , оценка 3.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы