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 监控变量表明第二次递归调用没有正确传递其参数。请帮忙!先感谢您!

4

2 回答 2

2

请参考: http: //p2p.wrox.com/visual-c/66347-quick-sort-c-code.html

此示例应该可以帮助您入门。

于 2013-09-05T18:24:52.943 回答
0

您对第二个数组大小的计算是错误的。

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

这将起作用。

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