个人简介,并不绝对,如有错误,敬请指出,谢谢:)
public static void sort(int[] a) {
a, 0, a.length - 1);
private static void sort(int[] a, int left, int right) {
if (left >= right) return;
//当左边界大于右边界直接返回不作处理。
int v = a[left], le = left, index = left + 1, ri = right;
//我们拿到左边界的副本,右边界的副本,取第一个元素为比较元素,比较元素的下一个元素作为索引元素。
while (index <= ri) {
//当索引<=右边界时进行处理
if (a[index] < v) {
a, index++, le++);
//如果遇到的元素小于比较元素的话,把这个元素与左边界互换。
//简单的理解就是把小于比较元素的那个元素,都往左边挪动,然后索引+1,表示应该比较下一个元素了。
//随后,会对以原左边界和现左边界划分的元素进行又一次三向快速排序。
else if (a[index] > v) {
a, index, ri--);
//如果遇到的元素大于比较元素的话,把这个元素与右边界互换。
//总而言之就是像快拍一样,小的放左边,大的放右边。
else {
index++;
//在比较元素等于索引元素的情况下,索引自增,取新的索引元素。
//System.out.println(Arrays.toString(a));
a, left, le - 1);
//对左边界的元素进行三向快排
a, ri + 1, right);
//对右边界的元素进行三向快排
private static void swap(int[] a, int i, int j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
public static void main(String[] args) {
int[] a = {1,5,7,8,2,3};
//如果我们查看输出结果的话,会看到如下结果
//[1, 7, 8, 2, 3, 5]
//[1, 5, 2, 3, 7, 8]
//[1, 2, 3, 5, 7, 8]
sort(a);
System.out.println(Arrays.toString(a));