学习借鉴 https://blog.youkuaiyun.com/u014241071/article/details/81565148
public class QuickSort {
public static void swap(int data[],int i,int j){
//交换两个数组的位子
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
public static void subSort(int[] data,int start,int end){
if (start<end){
//基准数
int base = data[start];
//左哨兵索引
int left = start;
//右哨兵索引
int right = end+1;
while (true){
//左哨兵查找小于基准数的数组下标
while (left<end && data[++left] - base <= 0);
//右哨兵查找大于基准数的数组下标
while (right>start && data[--right] - base >= 0);
if (left<right){
//满足条件交换
swap(data,left,right);
}else{
break;
}
}
//两个哨兵碰到一起后,交换基准数 和 右哨兵 的位子
swap(data,start,right);
//递归 基于右哨兵左半数组
subSort(data,start,right-1);
//递归 基于右哨兵右半数组
subSort(data,right+1,end);
}
}
public static void quickSort(int[] data){
//传入需要排序的数组对象,数组的开始下标,结束下标
subSort(data,0,data.length-1);
}
public static void main(String[] args) {
int[] data = {9,-11,31,24,-31,-48,25,21,30,11,12,89};
System.out.println("排序之前:\n"+Arrays.toString(data));
quickSort(data);
System.out.println("排序之后:\n"+Arrays.toString(data));
}
}
控制台输出:
排序之前:
[9, -11, 31, 24, -31, -48, 25, 21, 30, 11, 12, 89]
排序之后:
[-48, -31, -11, 9, 11, 12, 21, 24, 25, 30, 31, 89]