// 快速排序
public class QuickSort {
//partition函数
//划分函数,每次取数组第一个为分界元素(划分规则可自定)
//左边都比他小,右边都比他大
private static int Partition(int[] arr,int low,int high) {
int key=arr[low];
while(low<high) {
//先从最右边扫描,直到有不该属于右边的元素,
//则退出while循环
//这里的不该是指右边每个元素都该比key(分界元素)大
//因为low的元素已经被保存在key中,直接用high覆盖low
while(low<high&&arr[high]>=key)
high--;
arr[low]=arr[high];
while(low<high&&arr[low]<=key)
low++;
arr[high]=arr[low];
}
arr[low]=key;
return low;
}
public static void quick(int[] arr,int low,int high) {
if(low<high) {
int index=Partition(arr, low, high);
quick(arr, low, index-1);
quick(arr, index+1, high);
}
}
public static void main(String[] args) {
int[] arr= {13,47,58,100,100,100,7,5,49,3,4,3,20,20,2,1};
int high=arr.length-1;
quick(arr, 0, high);
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
}
}
运行结果