0
void qkSort (int *arr,int size)
{
    if (size>1)
    {
        int p = partition(arr,size);
    qkSort(arr,p);
    qkSort(arr+p+1,size-(p-1));
    }
    return;
}

int partition(int *arr,int size)
{
    int i,j,pivot,temp;
    pivot = size-1;
    for(i=0,j=-1;i<size-1;++i)
    {   
        if (arr[i]<arr[pivot])
        {
             ++j;
             if(i!=j)
             {
                 temp = arr[i];
                 arr[i] = arr[j];
                 arr[j] = temp;
             }
        }
    }

    temp = arr[pivot];
    arr[pivot] = arr[j+1];
    arr[j+1] = temp;

    pivot = j+1;

    return pivot;
}

プログラムがハングアップします。gdb で変数を監視すると、2 番目の再帰呼び出しで引数が正しく渡されないことがわかります。助けてください!前もって感謝します!

4

2 に答える 2

2

参照してください: http://p2p.wrox.com/visual-c/66347-quick-sort-c-code.html

この例は、開始するのに役立ちます。

于 2013-09-05T18:24:52.943 に答える
0

2 番目の配列のサイズの計算が間違っています。

qkSort(arr+p+1,size-(p-1));

これは機能します。

qkSort(arr+p+1,(size-p)-1);
于 2013-09-05T19:11:55.127 に答える