快速排序
int get_middle(int a[], int low,int high){
int pos = a[low];
while (low<high){
while (a[high] >= pos&&high > low) high--; //从low开始,则先从高位开始替换,至多到low+1,
swap(&a[high], &a[low]); //因为此时的a[high]已经大于pos了,我们把肯定在pos之前的但未必是小于pos的low换过来
while (a[low] <= pos&&low < high) low++;
swap(&a[high], &a[low]);
}
return low;<span style="white-space:pre"> </span>//返回的必然是low,哪怕一开始设定pos=a[high],当a[low]是最小元素或者a[high]是最大元素,返回low和high是一样的
}
void quick_sort(int a[], int low, int high){
if(low < high){
int middle = get_middle(a,low,high);
quick_sort(a, low, middle - 1);
quick_sort(a, middle+1, high);
}
}
关于middle的选择还是值得深思的,为何一定返回low?