原理大家可以参考:https://blog.csdn.net/pengzonglu7292/article/details/84938910
图解讲的很清楚
下面是我的实现
public class QuickSort {
public static void quickSort(int[] arr){
sort(arr,0,arr.length-1);
}
/**
* 排序
* @param arr
* @param low
* @param high
*/
public static void sort(int[] arr,int low,int high){
if (low<high){
int index = getIndex(arr,low,high);
//将基准数左右分开,对左右分别排序
sort(arr,0,index-1);
sort(arr,index+1,high);
}
}
/**
* 找到基准数的位置
* @param arr
* @param low
* @param high
* @return
*/
public static int getIndex(int[] arr,int low,int high){
int flag = low;
while (low<high){
//右指针依次往前遍历小于基准数的数
while (low<high&&arr[high]>=arr[flag]){
high--;
}
//左指针依次往后遍历大于基准数的数
while (low<high&&arr[low]<arr[flag]){
low++;
}
//交换两个数位置
swap(arr,low,high);
}
//当两个指针相遇,交换基准数与当前数
swap(arr,flag,low);
return low;
}
/**
* 交换位置
* @param arr
* @param a
* @param b
*/
public static void swap(int[] arr,int a,int b){
if (a!=b){
int k;
k=arr[a];
arr[a]=arr[b];
arr[b]=k;
}
}
public static void main(String[] args) {
int[] arr = new int[]{1, 4, 2, 5, 3, 6, 9, 8, 7};
quickSort(arr);
for (int a: arr) {
System.out.println(a);
}
}
}