我对这个中间3函数的快速排序感到困惑(它来自Mark Allen Weiss的数据结构和C 中的算法分析):
ElementType
Median3(ElementType A[], int Left, int Right){
int Center = (Left + Right)/2;
if(A[Left] > A[Center]{
Swap(&A[Left], &A[Center]);
}
if(A[Left] > A[Right]{
Swap(&A[Left], &A[Right]);
}
if(A[Center] > A[Right]{
Swap(&A[Center], &A[Right]);
}
Swap( &A[Center], &A[Right - 1]); /* Hide pivot */
return A[right - 1];
}
为什么此功能在返回枢轴值之前隐藏枢轴?
我的想法是它想要在递归快速排序中减少枢轴的影响。因为每次Quick Sort使用左/右部分对其自身进行递归调用时,中心元素将是边缘。
是吗?希望有人可以帮助我。 THX〜!