1.本科时候,严老师的那本书上给的写法
int partition(int A[],int left,int right){
if(left >= right)
return left;
int x = A[left];
while(left < right){//left should be less than right. left is overwritten....
while(left < right && A[right] > x)
--right;
A[left] = A[right];//left is overwritten
while(left < right && A[left] >= x)
++left;
A[right] = A[left];//left is empty now and should be overritten by next loop or end loop;
}
A[left] = x;
return left;
}
left,right 分别可以存储元素。区间表示为 A[left,right]
思想很简单:把枢轴量保存下来,这个时候 left 空闲,分别从尾部和头部开始查找,找到第一个比枢轴量大的值,放在前面空闲的位置,然后从头开始找一个大于枢轴量的值放在后面。
结果这一轮之后, left 表示为空闲的位置, right 表示结尾位置。和最开始情况一样,这样就维持了一个循环不变量。
关于里面的各个部分等号是否能够取得的问题,最简单的方式,就是拿一个比较小的数组进行测式,比如大小为2的数组。
返回的结果: A[le