0

そこで、クイックソートアルゴリズムとホアパーティションアルゴリズムを書きました。どういうわけか、main () で例のケースを実行しようとすると、quickSort (test, 0,3) でハングアップします。無限ループになりそうです。2つの機能は個別に問題ないように見えるため、修正方法がわかりません。

私はデバッグを試みましたが、私は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」のようにソートされて出力されることを期待しています。

4

2 に答える 2