1、算法思想:
第一步:以左边第一个数为哨兵,从右边一直走找到第一个比哨兵小的数,从左边一直走找到第一个比哨兵大的数,交换
第二步:当大数的索引比小数的索引大时,将小数与左边的哨兵交换,这时左边的数都比哨兵小,右边的数都比哨兵大
第三步:重复第一步第二步,递归哨兵左右两边的数组
2、动图演示(动图来源菜鸟教程)
代码实现:
public class QuickSort {
public static void main(String[] args) {
int[] arr = {22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70};
int[] ans = quickSort(arr, 0, arr.length - 1);
for(int i : ans) {
System.out.print(i + " ");
}
}
private static int[] quickSort(int[] arr, int left, int right) {
if(left > right) {
return arr;
}
int i = left, j = right;
while (i < j) {
while(i < j && arr[j] >= arr[left]) {
j--;
}
while(i < j && arr[i] <= arr[left]) {
i++;
}
swap(arr, i, j);
}
swap(arr, i, left);
quickSort(arr, left, i -1);
quickSort(arr, i + 1, right);
return arr;
}
private static void swap(int[] arr, int i, int j) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
运行结果:3 5 9 22 32 34 35 37 50 55 64 70 82 89