快排思路,选择第一元素,数组剩下和它相比,小于的放在左边,大于放在右边,进行递归。
我们头疼就是元素怎么交换,换个思路:
小时候都玩过这个游戏,如果方块是满的,那肯定无法移动,需要拿出一块。
现在有这么一个数组,第一个元素是 4,剩下和 4 进行比较。
把 4 拿出来之后,数组第一个位置,变为空可以放其他值;
4 和第二个元素 1 比较,1<4 需要左移,1 的位置就变为空;
这样等全部比较完,我们在把 4 放入空。
但是,存在其他情况:
我们的4和空对应不上了,2 要放到空的位置;
此时如果把空放到 2 的位置,那么最后放入 4 的时候,出现左面比 4 大的情况;
我们空的右边一位,放入 2 的位置,空右移;
这里没有全部右移,因为有点像插入排序,繁琐;
最后:
代码示例
package com.learn.sort;
import java.util.Arrays;
public class Sort {
public static void kuaisu(int[] arr) {
sort(arr, 0, arr.length-1);
}
private static void sort(int[] arr, int low, int high) {
if (low >= high) {
return;
}
// 取出第一个,指定空
int pivot = arr[low], kong = low;
// 比较移动
for (int i=low+1; i<=high; i++) {
if (arr[i] < pivot) {
arr[kong] = arr[i];
// 第二种情况
if (i - kong > 1) {
arr[i] = arr[kong+1];
}
kong++;
}
}
// 比较完毕放入空
arr[kong] = pivot;
// 递归处理
sort(arr, low, kong-1);
sort(arr, kong+1, high);
}
public static void main(String[] args) {
int[] arr = {4,1,7,5,2,6};
kuaisu(arr);
System.out.println(Arrays.toString(arr));
}
}
上面只是我给大家提供的思路,面试的时候不要说 空什么的。