作为练习,我用C编写了使用指针的快速排序算法。请评论并帮助我找到破案的情况(如果有的话)。
void qsort(int *, int, int);
void swap(int *, int *);
void qsort(int *v, int left, int right)
{
int i, *last;
if (right <= left)
return;
last = v + left; //choosing the first element as the pivot
for (i = left + 1; i <= right; i++)
if (*(v + i) < *(v + left))
swap(++last, v + i); //swapping the numbers < pivot
swap(v + left, last);
qsort(v, left, last - v - 1); //sub-array containing numbers < pivot
qsort(v, last - v + 1, right); //sub-array containing numbers >= pivot
}
void swap(int *i, int *j)
{
int temp;
temp = *i;
*i = *j;
*j = temp;
}发布于 2013-05-22 20:48:45
我会修改一个排他性的,而不是包含性的上限,即写i < right而不是i <= right和last - v而不是last - v - 1。
这样做的优点是使基本调用qsort(v, 0, length)而不是qsort(v, 0, length - 1)。
https://codereview.stackexchange.com/questions/26483
复制相似问题