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

28 阅读2分钟

概况

昨晚心血来潮,想看一看网上关于快速排序的帖子,发现有些帖子的代码写的很乱,没有简单的把快排写出来,而且还写复杂了:大致就是在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

参考

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