Метод "быстрой сортировки" массива - C (СИ)
Формулировка задачи:
Здравствуйте, помогите разобраться с проблемой. Общее задание звучит так: написать программу, которая будет загружать массив из файла, сортировать его с помощью метода быстрой сортировки и записывать итоговый массив в файл. Я нашел метод, разобрался с ним, написал программу, начал тестировать, и как оказалось, есть ошибка, которую я не могу найти.
Ошибка состоит в том, что при размере массива 3 или 6, массив сортируется, но как бы смещается на одно значение вперед, а с остальными размерностями сортировка работает правильно.
Вот пример:
Массив:
1 6 4 3 2 8
Получается массив:
0 1 2 3 4 6
Вот мой код:
Файл должен быть вида:
размерность
1-эл 2-эл ... n-эл
Пример:
6
1 6 4 3 2 8
Помогите пожалуйста найти и исправить ошибку, просто я уже все перепробовал и ничего не получается
void quickSort(int * a, int N) { long i = 0, j = N; int temp, p; p = a[ N/2 ]; do { while ( a[i] < p ) i++; while ( a[j] > p ) j--; if (i <= j) { temp = a[i]; a[i] = a[j]; a[j] = temp; i++; j--; } } while ( i<=j ); if ( j > 0 ) quickSort(a, j); if ( N > i ) quickSort(a+i, N-i); } main() { int a[10]; FILE *f; char path[256]; int i,n; printf("Введите путь к файлу с исходными данными: "); gets(path); f=fopen(path,"r"); fscanf(f,"%d",&n); for (i=0;i<n;i++) fscanf(f,"%d",&a[i]); fclose(f); printf("Размер массива: %d",n); printf("\nМассив A:\n"); for (i=0;i<n;i++) printf("%d ",a[i]); quickSort(a, n); printf("\nОтсортированный массив A:\n"); for (i=0;i<n;i++) printf("%d ",a[i]); printf("\nВведите путь для записи результата: "); gets(path); f=fopen(path,"w"); fprintf(f,"Полученный отсортированный массив А:\n"); for (i=0;i<n;i++) fprintf(f,"%d ",a[i]); fclose(f); }
Решение задачи: «Метод "быстрой сортировки" массива»
textual
Листинг программы
while ( a[j] > p ) j--;
Объяснение кода листинга программы
- Начинается цикл while, условием которого является выражение
a[j] > p
. - В каждой итерации цикла значение переменной
j
уменьшается на единицу. - Оператор
--
используется для уменьшения значения переменнойj
на единицу. - Цикл выполняется до тех пор, пока значение переменной
a[j]
больше значения переменнойp
. - Когда условие становится ложным, цикл завершается.
- Значение переменной
j
в этот момент будет содержать индекс элемента, который необходимо поместить в начало массива для правильной сортировки. - После завершения цикла выполняются дополнительные действия, которые не указаны в предоставленном коде.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д