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监视变量表明第二个递归调用没有正确传递其参数。请帮忙!提前谢谢!
答案 0 :(得分:2)
请参阅:http://p2p.wrox.com/visual-c/66347-quick-sort-c-code.html
此示例可帮助您入门。
答案 1 :(得分:0)
你计算第二个数组的大小是错误的。
qkSort(arr+p+1,size-(p-1));
这样可行。
qkSort(arr+p+1,(size-p)-1);