java快速排序简化

快排思路,选择第一元素,数组剩下和它相比,小于的放在左边,大于放在右边,进行递归。

我们头疼就是元素怎么交换,换个思路:

小时候都玩过这个游戏,如果方块是满的,那肯定无法移动,需要拿出一块。 

现在有这么一个数组,第一个元素是 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));
    }

}

上面只是我给大家提供的思路,面试的时候不要说 空什么的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值