美文网首页Swift刷算法
Swift刷算法:手撕快排

Swift刷算法:手撕快排

作者: JonorZhang | 来源:发表于2022-06-23 09:24 被阅读0次

给你一个整数数组 nums,请你将该数组升序排列。
示例:
输入:nums = [5,2,4,3,1]
输出:[1,2,3,4,5]
LeetCode: https://leetcode.cn/problems/sort-an-array/

class Solution {
    func sortArray(_ nums: [Int]) -> [Int] {
        var nums = nums

        func fastsort(_ lo: Int, _ hi: Int) {
            // 越界判断
            if lo >= hi { return }
            // 一般使用第0个值作为基准即可
            // 这里随机取值防止极端情况出现O(N^2)复杂度
            let mid = Int.random(in: lo ... hi)
            // 记录基准值
            let pivot = nums[mid]
            // 变回熟悉的“一般使用第0个值作为基准即可”的情况
            nums[mid] = nums[lo]

            var i = lo, j = hi
            while i < j {
                // 找到右侧小于基准值的位置,填入左侧【坑位i】
                while i < j, nums[j] >= pivot { j -= 1 }
                nums[i] = nums[j]
                // 找到左侧大于基准值的位置,填入右侧【坑位j】
                while i < j, nums[i] <= pivot { i += 1 }
                nums[j] = nums[i]
            }
            // i、j 重合,该坑位填入基准值
            nums[i] = pivot

            // 分别递归排序基准值左、右两侧数组
            fastsort(lo, i - 1)
            fastsort(i + 1, hi)
        }

        fastsort(0, nums.count - 1)
        return nums
    }
}
image.png

相关文章

  • Swift刷算法:手撕快排

    给你一个整数数组 nums,请你将该数组升序排列。示例:输入:nums = [5,2,4,3,1]输出:[1,2,...

  • Sequence in swift

    begin with one quickSort 之前在学习时曾看到swift如此简洁地表达出了快排算法。 时虽叹...

  • 网易云音乐一面

    网易云音乐一面 了解快排吗,说说实现原理本来想当面手撕个快排的(昨晚手撕了两遍),但是面试官只让我简单地讲讲原理,...

  • 快排(swift)

    伪代码如下: 实践代码如下:

  • 快排算法

    转:微信公众号:程序员小灰 快排算法 是按分治算法的思路进行排序的。 选定参照元素后,每次比较都按分治算法将小的移...

  • 快排算法

    本文摘自https://blog.csdn.net/yzllz001/article/details/509828...

  • 快排算法

    这里对快速排序做一下总结(之前在写时间复杂度和空间复杂度时候想到的。) 1. 思想 快排的思想就是说,选定数组中第...

  • 【算法】快排

    1.时间复杂度 2.快排

  • 2018-07-13

    快速排序算法 快排普通版本: 快排优化版本: 测试代码:

  • Java算法——快排算法

网友评论

    本文标题:Swift刷算法:手撕快排

    本文链接:https://www.haomeiwen.com/subject/cempvrtx.html