面经整理——算法

排序算法

快排流程

采用分治的思想,对于一组数据,选择一个基准元素(哨兵),通常选择第一个或最后一个元素,通过第一轮扫描,比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);
    }
}
相关推荐
15 分钟前
数据结构第一课:复杂度解析
数据结构
古法安卓1 小时前
Android-epoll原理详解
android·java·android studio
大熊背1 小时前
树莓派IspPipeline LSC模块原理详解
算法·lsc·isppipeline·mesh lsc
fireworks991 小时前
接口鉴权(401与403)
java·后端
wear工程师1 小时前
线程池里的异常去哪了?execute 和 submit 不是一回事
java
孔明click331 小时前
别人绕过我的网关直接调用资源服务怎么办?使用 Sa-Token 解决:网关转发鉴权、RPC调用鉴权
java·sa-token·springboot·权限·权限认证
吴声子夜歌1 小时前
Java面试——设计模式(一)
java·设计模式·面试
半亩码田2 小时前
C#转Python第3.6篇:Python 的 @property 比 C# 的 get/set 更灵活
java·python·c#
zander2582 小时前
LeetCode 300. 最长递增子序列
算法·leetcode·深度优先
老郑聊AI业财智造2 小时前
Spring AI 技术架构与源码分析
java·人工智能·后端·spring·架构·软件工程