我很困惑为什么我的递归快速排序功能不起作用。
这是原始函数调用:
qSort(quickArr,0,inCount-1,&qSwapCount);
其中inCount-1是最终数组元素的位置
这是递归快速排序功能:
void qSort(int *qArr, int left, int right, int *qCount)
{
if(left<right)
{
int pivotIndex=(left+right)/2;
int pivot=partition(qArr, left, right, pivotIndex, qCount);
qSort(qArr, left, pivot-1, qCount);
qSort(qArr, pivot+1,right, qCount);
}
}
这是枢轴功能
int partition(int *qArr, int left, int right, int pivot, int *qCount)
{
int i;
int pivotValue=qArr[pivot];
int index=left;
swap(&qArr[pivot],&qArr[right]);
(*qCount)++;
for(i=left;i<right;i++);
{
if (qArr[i]<pivotValue)
{
swap(&qArr[i],&qArr[index]);
(*qCount)++;
index++;
}
}
swap(&qArr[index],&qArr[right]);
return index;
}
排序必须合适,紧跟以下提供的伪代码: http://en.wikipedia.org/wiki/Quicksort
感谢您的帮助!
这是我的输出: 190 506 115 471 168 229 851 497 728 549 33 435 214 439 822 500 797 692 44 731 222 613 550 669 556 978 756 402 751 357 102 393 298 604 706 686 899 997 268 758 684 147 151 814 262 310 959 82 234 119 976 13 709 27 989 375 150 639 65 552 252 542 925 637 273 2 655 827 584 418 163 871 485 982 331 810 894 201 620 123 853 231 870 335 774 546 775 351 116 73
显然未分类:-D
答案 0 :(得分:3)
在for
循环结束时你有一个分号..循环体只执行一次。
for(i=left;i<right;i++);