面经整理——算法

排序算法

快排流程

采用分治的思想,对于一组数据,选择一个基准元素(哨兵),通常选择第一个或最后一个元素,通过第一轮扫描,比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);
    }
}
相关推荐
越来越无动于衷1 小时前
Java 实现 WebService(SOAP)联网调用:从原理到实战
java·开发语言
静水楼台x1 小时前
Java之String系列--intern方法的作用及原理
java·spring
专注于大数据技术栈1 小时前
java学习--枚举(Enum)
java·学习
愤怒的代码1 小时前
Java 面试 100 题深度解析 · 专栏总览与大纲
java·面试
银迢迢2 小时前
idea控制台中文乱码采用好几种方法一直解决不了
java·ide·intellij-idea
悦悦子a啊2 小时前
将学生管理系统改造为C/S模式 - 开发过程报告
java·开发语言·算法
步步为营DotNet2 小时前
深度解析C# 11的Required成员:编译期验证保障数据完整性
java·前端·c#
痕忆丶2 小时前
双线性插值缩放算法详解
算法
han_hanker2 小时前
泛型的基本语法
java·开发语言