一句话了解各种排序算法核心思想-配图

概况

昨晚心血来潮,想看一看网上关于快速排序的帖子,发现有些帖子的代码写的很乱,没有简单的把快排写出来,而且还写复杂了:大致就是在while里面又两个并列的while循环,这样的代码不知在一个贴子上发现过,所以我决定写一篇关于排序的问题,在配上动图方便理解

快速排序

核心思想

选中一个元素为基准点,将其他元素和这个基准点进行比较,大于则放在基准点的右侧(既然是右侧,那么我就放在最右侧),小于的则放在左侧(既然是左侧,那么我就放在最左侧)。

那么在一次排序完成后,可以得到这样的结果:基准点左侧的数都不大于基准点,右侧的数都不小于基准点,对应和基准点相同的数,则看自己的处理逻辑是放在左侧还是右侧。

配图

这里 只配了第一次排序的图片,因为太难画了

hn62z-jti9y

这里在最后转gif的时候把最后两个ppt的动画去掉了,最后的样子如图所示:

image-20230209131448388

接下来对左边和右边的数据再排序即可

实例代码

public static void sort(int[] arr, int low,int high){
    	// 退出递归的条件
        if (high <= low){
            return;
        }
        int base = arr[low];
        int point = low;
        int end = high;
        point++;
        int tmp;

        while (high >= point){

            if (arr[point] > base){
                tmp = arr[high];
                arr[high] = arr[point];
                high--;
                arr[point] = tmp;
                int a = 0;
            }else {
                // 当前的值小于等于标准值,则将该值向前移动一位即可
                arr[point-1] = arr[point];
                point++;
            }
        }
        point--;
        arr[point] = base;

        sort(arr,low,point-1);
        sort(arr,point+1,end);
    }

测试数据:

public static int[] arr = {1,1,2,0,9,3,12,7,8,3,4,65,22};

其他

其他排序后续补充

关于

实例代码:包含ppt

参考

入门推荐:我的第一本算法书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值