/**
* @Author: Kerven Han
* @Date:
* @Describe:
*/
public class QuickSort {
public static void main(String[] args) {
int[] arr = {2,3,4,1,22,90,45,12,89,12,99,33};
sort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public static int partition(int[] arr, int left, int right) {
int pivotKey = arr[left];
// 这里的两个while循环我们需要明白它们的含义
//这个是来空值左右两边交替扫描的,
while(left < right) {
//这个是来控制左边或者右边的指针移动的
while(left < right && arr[right] >= pivotKey)
{ right --;}
arr[left] = arr[right]; //把小的移动到左边
while(left < right && arr[left] <= pivotKey)
{ left ++;}
arr[right] = arr[left]; //把大的移动到右边
}
// 把两者相遇的点和基准值互换,是把基准值赋给了相遇的那个位置
arr[left] = pivotKey; //最后把pivot赋值到中间
//返回的是两者相遇的那个点
return left;
}
/**
* 递归划分子序列
* @param arr
* @param left
* @param right
*/
public static void quickSort(int[] arr, int left, int right) {
if(left >= right) {return ;}
int pivotPos = partition(arr, left, right);
quickSort(arr, left, pivotPos-1);
quickSort(arr, pivotPos+1, right);
}
public static void sort(int[] arr) {
if(arr == null || arr.length == 0)
{return ;}
quickSort(arr, 0, arr.length-1);
}
}
也可也参考下别人的: