/*
* 快排函数(传入 数组的长度 ,例如sort(0,a.length-1);)
if(l<r){
int q=position(l,r);
sort(l,q-1);
sort(q+1,r);
}
}
int a=x[l];
if(i>=j)break;
swap(x,i,j);
x[j]=a;
return j;
* 快排函数(传入 数组的长度 ,例如sort(0,a.length-1);)
* */
private void sort(int l,int r) {
if(l<r){
int q=position(l,r);
sort(l,q-1);
sort(q+1,r);
}
}
private int position(int l,int r){
// j之所以是r+1 ,因为下面先执行j-1,再比较x[j]与a的值。
// i=l,是因为 x[l]作为基准数,所以不参与比较也是可行的。
int i=l,j=r+1;int a=x[l];
while(true){
//从左往右 找比“基准数”大的值
while(x[++i]<a&&i<r);
//从右往左 找比“基准数”小的值
if(i>=j)break;
swap(x,i,j);
}
//按照大小分组之后,将基准数移到中间位置。
x[l]=x[j];x[j]=a;
return j;
}
void swap(int [] arr,int m,int n){
int temp=arr[m];
arr[m]=arr[n];
arr[n]=temp;
}