代码如下:
//快排切分,返回下标j,使比num[j]小的数都在j的左边,比num[j]大的数都在j的右边
private int partition(int []nums,int l,int r){
int v=nums[l];
int i=l;
int j=r+1;
while (true){
//从第二个数开始 第一个数是标志值
while (++i<=r&&nums[i]<v);
//从最后一个数开始
while (--j>=l&&nums[j]>v);
//退出循环的条件
if(i>=j){
break;
}
//交换
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
nums[l]=nums[j];
nums[j]=v;
return j;
}