快速排序(单边循环)步骤及代码:
![](https://i-blog.csdnimg.cn/blog_migrate/b88f9e7c707722bc462f07a16bf096ac.png)
单边循环代码实现:
//快速排序(单边循环)
public class QuickSort {
public static void main(String[] args) {
int[] a = {5,3,7,2,9,8,1,4};
partition(a,0,a.length-1);
quick(a,0,a.length-1);
}
public static void quick(int[] a,int l,int h){
if(l >= h){
return;
}
int p = partition(a, l, h);//p 代表索引值
quick(a,l,p-1);//左边分区的范围确定
quick(a,p+1,h);//右边分区的范围确定
}
public static int partition(int[] a, int l, int h) {
int pv = a[h];//pv 是基准点元素
int i = l;
for(int j = l ; j < h ; j++){
if(a[j] < pv){
if(i != j){
swap(a,i,j);
}
i++;
}
}
if(i != h){
swap(a,h,i);
}
System.out.println(Arrays.toString(a) + "i=" +i);
//返回值代表了基准点元素所在的正确索引,用它确定下一轮分区的边界
return i;
}
public static void swap(int[] a,int i,int j){
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}