面经整理——算法

排序算法

快排流程

采用分治的思想,对于一组数据,选择一个基准元素(哨兵),通常选择第一个或最后一个元素,通过第一轮扫描,比base小的元素都在base左边,比base大的元素都在base右边,再有同样的方法递归排序这两部分,直到序列中所有数据均有序为止。

如,选取下标为0的元素作为哨兵,r=num.size()-1, 首先移动r找到比哨兵小的元素,将r当前指向的元素放到l所在位置。

然后移动l找到大于等于哨兵的位置,替换r所在的位置。

依次交替,知道l与r相遇,将相遇位置赋予哨兵的值。

然后左右两侧递归。

java 复制代码
class Solution {
    public int[] sortArray(int[] nums) {
        quickSort(nums, 0, nums.length-1);
        return nums;
    }
    void quickSort(int[] nums, int l, int r){
        if(l>=r){
            return;
        }
        int base = nums[l];
        int ll=l, rr=r;
        while(l<r){
            while(l<r&&nums[r]>=base){
                r--;
            }
            nums[l] = nums[r];
            while(l<r&&nums[l]<base){
                l++;
            }
            nums[r] = nums[l];
        }
        nums[l] = base;
        quickSort(nums, ll, l-1);
        quickSort(nums, l+1, rr);
    }
}
相关推荐
文丑颜不良啊3 小时前
LeetCode2761~2780题目解析
java·leetcode
jyOverQ3 小时前
从零学 JVM(六):垃圾回收算法详解——标记清除、标记复制与标记整理
jvm·算法
IT枫斗者枫哥3 小时前
子线程断言失败,JUnit 为什么还显示通过?
java·后端
严肃小白兔5 小时前
第 06/24 期:神经网络的反向传播算法:从链式法则到梯度计算
人工智能·神经网络·算法
落羽的落羽5 小时前
【C++】C++17的主要特性
linux·服务器·开发语言·c++·算法·机器学习
考虑考虑5 小时前
JDK27中的Set.ofLazy
java·后端·java ee
文丑颜不良啊6 小时前
LeetCode2841~2860题目解析
java·leetcode
小南家的青蛙6 小时前
Tomcat与Jetty深度对比
java·tomcat·jetty
【心态好不摆烂】6 小时前
数据结构基础精讲3
数据结构·算法