Метод "быстрой сортировки" массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, помогите разобраться с проблемой. Общее задание звучит так: написать программу, которая будет загружать массив из файла, сортировать его с помощью метода быстрой сортировки и записывать итоговый массив в файл. Я нашел метод, разобрался с ним, написал программу, начал тестировать, и как оказалось, есть ошибка, которую я не могу найти. Ошибка состоит в том, что при размере массива 3 или 6, массив сортируется, но как бы смещается на одно значение вперед, а с остальными размерностями сортировка работает правильно. Вот пример: Массив: 1 6 4 3 2 8 Получается массив: 0 1 2 3 4 6 Вот мой код:
Листинг программы
  1. void quickSort(int * a, int N)
  2. { long i = 0, j = N;
  3. int temp, p;
  4. p = a[ N/2 ];
  5. do
  6. {
  7. while ( a[i] < p ) i++;
  8. while ( a[j] > p ) j--;
  9. if (i <= j)
  10. {
  11. temp = a[i]; a[i] = a[j]; a[j] = temp;
  12. i++; j--;
  13. }
  14. } while ( i<=j );
  15. if ( j > 0 ) quickSort(a, j);
  16. if ( N > i ) quickSort(a+i, N-i);
  17. }
  18. main()
  19. {
  20. int a[10];
  21. FILE *f;
  22. char path[256];
  23. int i,n;
  24. printf("Введите путь к файлу с исходными данными: ");
  25. gets(path);
  26. f=fopen(path,"r");
  27. fscanf(f,"%d",&n);
  28. for (i=0;i<n;i++)
  29. fscanf(f,"%d",&a[i]);
  30. fclose(f);
  31. printf("Размер массива: %d",n);
  32. printf("\nМассив A:\n");
  33. for (i=0;i<n;i++)
  34. printf("%d ",a[i]);
  35. quickSort(a, n);
  36. printf("\nОтсортированный массив A:\n");
  37. for (i=0;i<n;i++)
  38. printf("%d ",a[i]);
  39. printf("\nВведите путь для записи результата: ");
  40. gets(path);
  41. f=fopen(path,"w");
  42. fprintf(f,"Полученный отсортированный массив А:\n");
  43. for (i=0;i<n;i++)
  44. fprintf(f,"%d ",a[i]);
  45. fclose(f);
  46. }
Файл должен быть вида: размерность 1-эл 2-эл ... n-эл Пример: 6 1 6 4 3 2 8 Помогите пожалуйста найти и исправить ошибку, просто я уже все перепробовал и ничего не получается

Решение задачи: «Метод "быстрой сортировки" массива»

textual
Листинг программы
  1. while ( a[j] > p ) j--;

Объяснение кода листинга программы

  1. Начинается цикл while, условием которого является выражение a[j] > p.
  2. В каждой итерации цикла значение переменной j уменьшается на единицу.
  3. Оператор -- используется для уменьшения значения переменной j на единицу.
  4. Цикл выполняется до тех пор, пока значение переменной a[j] больше значения переменной p.
  5. Когда условие становится ложным, цикл завершается.
  6. Значение переменной j в этот момент будет содержать индекс элемента, который необходимо поместить в начало массива для правильной сортировки.
  7. После завершения цикла выполняются дополнительные действия, которые не указаны в предоставленном коде.

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


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

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

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

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

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

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