上个Post以数组最右边的那个元素作为支点,这里将
重写partition函数,以数组中间位置作为支点。
实现如下,
int partition(int array[], int left, int right)
{
/*以中间元素作为支点*/
int l=left, r=right, pivot=(left+right)/2;
while (l < r) {
if (array[l] < array[pivot]) {
l++;
continue;
}
if (array[r] > array[pivot]) {
r--;
continue;
}
SWAP(array+l, array+r);
/*更新pivot位置*/
if (pivot==l) pivot=r;
else if(pivot==r) pivot=l;
l++; r--;
}
/*注意:此时l==r*/
if (l < pivot) { /*支点在右边*/
if (array[l] < array[pivot]) l++;
}
else if (l > pivot) { /*支点在左边*/
if (array[l] > array[pivot]) l--;
}
SWAP(array+l, array+right);
/*返回新的支点位置*/
return l;
}
下一个Post将考虑给出qsort的非递归实现 。。。
posted on 2006-09-12 20:50
hzb 阅读(201)
评论(0) 编辑 收藏 引用