粥里有勺糖

vuePress-theme-reco 粥里有勺糖    2018 - 2023
粥里有勺糖 粥里有勺糖

Choose mode

  • dark
  • auto
  • light
关于我
备战春秋
  • 心得总结
  • 校招考点汇总
  • 面经汇总
  • 复习自查
技术笔记
  • 技术教程
  • 模板工程
  • 源码学习
  • 技术概念
  • 个人作品
  • 学习笔记
计算机基础
  • 算法与数据结构
  • 操作系统
  • 计算机网络
  • 设计模式
  • 剑指offer
大前端
  • javascript
  • vue
  • html
  • css
  • 🌏浏览器专题
  • Web性能优化
  • regexp
  • node
面试
  • 问解
  • javascript
  • css
  • 手撕代码
  • 性能优化
  • 综合问题
  • 面经汇总
  • 小程序
手撕代码
  • 数据结构与算法
  • javascript
  • css
个人站点
  • GitHub (opens new window)
  • 博客园 (opens new window)
  • 掘金 (opens new window)
线上作品
  • 轻取(文件收集) (opens new window)
  • 个人图床 (opens new window)
  • 考勤小程序 (opens new window)
  • 时光恋人 (opens new window)
  • 在线简历生成 (opens new window)
留言板
Github (opens new window)
author-avatar

粥里有勺糖

285

文章

40

标签

关于我
备战春秋
  • 心得总结
  • 校招考点汇总
  • 面经汇总
  • 复习自查
技术笔记
  • 技术教程
  • 模板工程
  • 源码学习
  • 技术概念
  • 个人作品
  • 学习笔记
计算机基础
  • 算法与数据结构
  • 操作系统
  • 计算机网络
  • 设计模式
  • 剑指offer
大前端
  • javascript
  • vue
  • html
  • css
  • 🌏浏览器专题
  • Web性能优化
  • regexp
  • node
面试
  • 问解
  • javascript
  • css
  • 手撕代码
  • 性能优化
  • 综合问题
  • 面经汇总
  • 小程序
手撕代码
  • 数据结构与算法
  • javascript
  • css
个人站点
  • GitHub (opens new window)
  • 博客园 (opens new window)
  • 掘金 (opens new window)
线上作品
  • 轻取(文件收集) (opens new window)
  • 个人图床 (opens new window)
  • 考勤小程序 (opens new window)
  • 时光恋人 (opens new window)
  • 在线简历生成 (opens new window)
留言板
Github (opens new window)
  • Algorithm

    • 算法与数据结构
    • 链表--转置
    • 二叉树--层序遍历
    • 二叉树--判断是否对称
    • 排序--快速排序
    • 排序--堆排序
    • 排序--归并排序
    • 字符串--大数相加
    • 字符串--最长公共子序列长度
    • 字符串--最长公共子串
    • 简单--斐波拉契数列1
    • 简单--斐波拉契数列2

快速排序

vuePress-theme-reco 粥里有勺糖    2018 - 2023

快速排序

粥里有勺糖 2020-08-02 手撕代码算法与数据结构

# 快速排序

公司: 这个频率比较高。。。对于前端来说,算基础考点

leetcode:912:排序树组题链

给你一个整数数组 nums,请你将该数组升序排列。

# 相关属性

  • 时间复杂度
    • 平均时间复杂度:O(N*logN)
    • 最坏情况下:O(N²)
      • 排序一个已经有序的数组,退化成冒泡排序,每一次都只能确定基准数的位置

# 交换法

原理参考-【坐在马桶上看算法】快速排序 (opens new window)

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var sortArray = function (nums) {
    const swap = (arr, i, j) => {
        [arr[i], arr[j]] = [arr[j], arr[i]]
    }

    const _quickSort = (arr, left, right) => {
        if (left >= right) {
            return
        }
        let o = left
        let i = left, j = right
        while (left !== right) {
            // 先从右往左动
            while (arr[right] >= arr[o] && left < right) {
                right--
            }
            while (arr[left] <= arr[o] && left < right) {
                left++
            }
            if (left < right) {
                swap(arr, left, right)
            }
        }
        swap(arr, o, left)
        _quickSort(arr, i, left - 1)
        _quickSort(arr, left + 1, j)
    }
    _quickSort(nums, 0, nums.length - 1)
    return nums
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# 填坑法

原理参考-漫画:什么是快速排序?(完整版) (opens new window)

function quickSort(data) {
    const _quickSort = (arr, left, right) => {
        if (left >= right) {
            return
        }
        let o = arr[left] // 选择的基数
        let oIndex = left // 当前的坑位置
        const i = left
        const j = right
        while (left < right) {
            while (left < right) {
                if (arr[right] < o) {
                    arr[oIndex] = arr[right] // 填坑
                    oIndex = right // 新坑
                    left++
                    break
                }
                right--
            }
            while (left < right) {
                if (arr[left] > o) {
                    arr[oIndex] = arr[left] // 填坑
                    oIndex = left // 新坑
                    right--
                    break
                }
                left++
            }
        }

        arr[oIndex] = o // 基数入坑
        // 开始下一轮
        _quickSort(arr, i, oIndex - 1)
        _quickSort(arr, oIndex + 1, j)
    }
    _quickSort(data, 0, data.length - 1)
    return data
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Edit this page (opens new window)
Last Updated: 2022/5/15 12:46:34