public class test6 {
public static void main(String[] args) {
int[]a={1,2,4,5,6,7,8,11,22,32,0};
quicksort(a,0,a.length-1);
util.print(a);
}
static void quicksort(int[]a,int p,int r){
if (p<r){
int pivot=partition(a,p,r); //确定主元(即确定一个位置,使之左边元素小于它,右边元素大于它)
quicksort(a,p,pivot-1); //对主元左边进行排序
quicksort(a,pivot+1,r); //对主元右边进行排序
}
}
static int partition(int[]a,int p,int r){
int pivot=a[p]; //默认给定要排序数组的起始位置为主元
int sc=p+1; //扫描指针默认为主元位置右一个
int bigger=r; //bigger指针默认指向数组尾部
while (sc<=bigger){ //扫描指针小于尾部指针
if (a[sc]<pivot) //扫描到的元素小于主元
sc++;
else{ //扫描到的元素大于主元
util.swap(a,sc,bigger); //将sc与bigger位置所在的两个元素进行交换,即将大于主元的元素放到后面
bigger--; //bigger指针左移
}
}
util.swap(a,p,bigger); //最后确定主元的位置
return bigger; //返回主元的位置
}
}
12-23
12-16
877
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)