Итак, я написал алгоритм быстрой сортировки и алгоритм разбиения хора.Каким-то образом, когда я пытаюсь запустить пример case в main (), он зависает на quickSort (test, 0,3).Кажется, есть бесконечный цикл.Я не вижу, как это исправить, так как две функции по отдельности кажутся нормальными.
Я попытался отладить, но я довольно плохо знаком с c.Я заметил, что quickSort (test, 0,3) вызывает себя рекурсивно.Так что я знаю, что проблема связана с высоким, а не уменьшением.Но я взял пример псевдокода с университетского слайда, чтобы создать функцию, и все, кажется, выстраивается.
void printArray(int A[], int high) {
for (int i=0; i<=high; i++) {
printf("%d ", A[i]);
}
}
int partitionHoare(int A[], int low, int high) {
int pivot=A[low];
int left = low-1;
int right= high+1;
while (1){
while (1){
left++;
if (A[left]>=pivot) break;
}
while (1){
right--;
if (A[right]<=pivot) break;
}
if (left<right) {
int temp=A[left];
A[left]=A[right];
A[right]=temp;
}
else return left;
}
}
void quicksort(int A[], int low, int high){
if (low<high){
int middle=partitionHoare(A,low, high);
quicksort(A, low,middle-1);
quicksort(A, middle, high);
}
}
void main (){
int test[]={64,81,24,42,90,30,9,95};
quicksort(test,0,7);
printArray(test,7);
Я действительно ожидаю, что тестовый массив будет распечатан следующим образом: «9, 24, 30, 42, 64, 81, 90, 95»