面经整理——算法

排序算法

快排流程

采用分治的思想,对于一组数据,选择一个基准元素(哨兵),通常选择第一个或最后一个元素,通过第一轮扫描,比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);
    }
}
相关推荐
Sweet锦39 分钟前
不调 Python,不装向量库:我用纯 Java 写了一套以图搜图引擎
java·人工智能·开源·图搜索
垆边人似月.1 小时前
任务混部(200 分档)
算法
言乐61 小时前
Python区分广度优先深度优先宽度优先的区别
python·算法·深度优先·广度优先·宽度优先
如意猴1 小时前
【C++】007 C/C++ 内存管理机制、malloc与new的区别及模板初阶
java·c++·算法
朝朝辞暮i1 小时前
C++ 第 32 课:main()、rclcpp::init()、spin()、shutdown()
开发语言·c++·算法
可乐鸡翅yeah_1 小时前
HLS 分片过期清理,直播旧 TS 分片磁盘爆满问题处理
java·后端·spring·m3u8·m3u8在线·音视频在线播放
专业程序开发源2 小时前
SSM校园拍摄交流服务平台36936-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·php·课程设计
用户094248568032 小时前
第23章:OpenJDK逃逸分析、标量替换与锁优化
java·jvm
wuminyu2 小时前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++
樱花落木兰2 小时前
分布式登录实战:Session 会话共享改造,Redis 存储用户登录状态
java·javascript·数据库·redis·分布式·缓存