当前位置: 首页 > article >正文

数据结构与算法之排序: 快速排序 (Javascript版)

排序

  • 排序:把某个乱序的数组变成升序或降序的数组 (这里用数组来做举例)

快速排序

  • 该排序属于 分治 策略
  • 将一个问题分解为两个问题来计算,计算完成之后,就会得到子任务的解,这些解不是最终问题的解,还需要merge起来

算法实现

Array.prototype.quickSort = function() {
    const rec = (arr) => {
        if(arr.length === 1) {
            return arr;
        }
        // 开始分区操作
        let l = [];
        let r = [];
        let m = arr[0]; // 选择当前第一个元素作为基准
        let len = arr.length;
        // 从第二项开始分区,除了基准,这样好分
        for(let i = 1; i < len; ++i) {
            if(arr[i] < m) {
                l.push(arr[i]);
            } else {
                r.push(arr[i])
            }
        }

        // 开始递归分区与合并
        return [...rec(l), mid, ...rec(r)];
    }
    // 得到最终递归结果
    const r = rec(this);
    // 将递归结果挂载到自身
    r.forEach((n, i) => {this[i] = n})
}

let arr = [15,4,23,52,1]
arr.insertionSort()
console.log(arr); //  [1, 4, 15, 23, 52]
  • 比冒泡,选择,插入性能都要好, 分而治之
  • Chrome 曾经用快排作为sort排序的方法
  • 思路
    • 分区:从数组中,任意选择一个基准,所有比基准小的元素放在基准前面,比基准大的元素放在基准后面
      • 此时,基准已经找到自己合适的位置了
    • 递归:递归地对基准前后的子数组进行分区
      • 在子数组中找到一个基准,并把它放到合适的位置
      • 一直递归下去,基准前后子数组最后的长度都是1,不用再递归了,此时子数组已经排序好了
      • 等所有子数组都排序好,我们整个快排结束
  • 时间复杂度: O(nlogn)
    • 递归时间: logn, 每次劈成2半
    • 分区时间:n,for循环,找出比基准小和大的元素

http://www.kler.cn/a/105820.html

相关文章:

  • AI工具百宝箱|任意选择与Chatgpt、gemini、Claude等主流模型聊天的Anychat,等你来体验!
  • Excel数据动态获取与映射
  • 智慧环保平台_大数据平台_综合管理平台_信息化云平台
  • Isaac Sim+SKRL机器人并行强化学习
  • Java putIfAbsent() 详解
  • 模型的评估指标——IoU、混淆矩阵、Precision、Recall、P-R曲线、F1-score、mAP、AP、AUC-ROC
  • Centos磁盘问题小纪
  • 扩展 Calcite 中的 SQL 解析语法
  • 基于STM32设计的万能红外遥控器(学习型)
  • CSS色域、色彩空间、CSS Color 4新标准 | 京东云技术团队
  • 【IO面试题 一】、介绍一下Java中的IO流
  • redis缓存击穿 穿透
  • ​如何使用ArcGIS Pro制作一张地形图
  • 1.初识MySQL
  • Leetcode链表问题汇总
  • AI口语APP的实现
  • 嵌入式面试3(C++相关)
  • 前端入门(一)JavaScript语法、数据类型、运算、函数
  • openEuler 22.03 LTS 环境使用 Docker Compose 一键部署 JumpServer (all-in-one 模式)
  • 前端性别判断
  • SpringBoot集成Redis Cluster集群(附带Linux部署Redis Cluster高可用集群)
  • Runner GoUI自动化测试发布
  • Talk | 纽约州立宾汉姆顿大学博士生丁琰:开放环境中机器人的任务与动作规划
  • 一致性hash算法
  • 搜维尔科技:【应用】配备MTi-3的轻便型ROV,在水下进行地理标记视觉检测
  • Vue3-小兔鲜项目