基本思想

  • 分治法
  • 每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。
  • 在最坏的情况下,仍可能是相邻的两个数进行了交换。因此快速排序的最差时间复杂度和冒泡排序是一样的,都是 O(n^2),它的平均时间复杂度为 O(nlogn) 。

直接上代码

// quickSort.js
/*** 快速排序(一)* 修改元素数组* 时间复杂度O(nlogn)* @param arr 待排序数组* @param left 数组最低位* @param right 数组最高位*/
const quickSort1 = function (arr, left, right) {// 递归出口是数组长度 <= 1if (!(arr instanceof Array) || arr.length <= 1) {return}if (left > right) returnlet x = arr[left] // 取最左值作为比较的基准值xlet i = leftlet j = right // i,j 为哨兵while(i != j) {// 从右往左开始找比x小的while(i < j && x <= arr[j]) {j--}// 从左往右开始找比x大的while (i < j && x >= arr[i]) {i++}// i, j停下来后且i<j时,交换值if (i < j) { let temp = arr[i]arr[i] = arr[j]arr[j] = temp}}// i, j相遇时,哨兵归位arr[left] = arr[i]arr[i] = x// 分治法,递归quickSort1(arr, left, i-1) // 基准值左边区间同样方法处理quickSort1(arr, i+1, right) // 基准值右边区间同样方法处理
}/*** 快速排序(二)* 不修改元素数组,返回排序后的数组* 时间复杂度O(nlogn)* @param arr 待排序数组*/
const quickSort2 = function (arr) {// 递归出口是数组长度 <= 1if (arr.length <= 1) return arrlet mid = Math.floor(arr.length / 2) let midVal = arr[mid] // 取中间值作为比较的基准值xconst left = [] // 存放 < 基准值的数const right = [] // 存放 >= 基准值的数for (let i = 0; i < arr.length; i++) {if (i === mid) continue // 基准值过滤掉if (arr[i] < midVal) {left.push(arr[i])}if (arr[i] >= midVal) {right.push(arr[i])}}// 分治法,同样的方法处理子数组,把结果拼接起来返回return quickSort2(left).concat(midVal, quickSort2(right))
}module.exports = {quickSort1,quickSort2
}

参考资料:《啊哈算法》

快速排序之JavaScript版相关推荐

  1. 算法笔记(JavaScript版)——排序

    算法笔记(JavaScript版)--排序 本文内容根据Rebert Sedgewick和Kevin Wayne的<算法(第四版)>整理,原代码为java语言,自己修改为JavaScrip ...

  2. 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版...

    转自:https://www.cnblogs.com/fwc1994/p/5884115.html 火星坐标.百度坐标.WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版 火星坐标 ...

  3. 【数据结构 JavaScript版】- web前端开发精品课程【红点工场】 --javascript-- 链表实现...

    <!DOCTYPE html> <html><head><title></title> </head><body>& ...

  4. 微信公众号推送课表及天气(事无巨细+JavaScript版+python版)

    微信公众号推送课表及天气 22.10.16更新 我已经做出来更优秀的直接在聊天列表中推送的了! 请移步 企业微信推送 超强版! 基础 简介 作者:申也 个人网站:申也个人网站(www.dongshen ...

  5. 地图着色问题javaScript版-- 《算法分析与设计》课程设计题目

    @地图着色问题javaScript版-- <算法分析与设计>课程设计题目 地图着色问题js版 已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色 ,总数最少 地图着 ...

  6. php 隐藏mp3地址下载地址,虾米音乐mp3地址解密javascript版和PHP版

    虾米音乐国内音乐互联网平台中最完善的平台.和网易.新浪等多家都有合作,用户体验也非常好. 为了能充分利用虾米音乐做自己喜欢的音乐相关小工具,特将虾米音乐相关的接口公布出来,供大家使用.这些接口包含了音 ...

  7. JavaScript版拼图小游戏

    慕课网上准备开个新的jQuery教程,花了3天空闲时间写了一个Javascript版的拼图小游戏,作为新教程配套的分析案例 拼图游戏网上有不少的实现案例了,但是此源码是我自己的实现,所以不做太多的比较 ...

  8. Javascript版-显示相应图片的详细信息

    Hi All, 分享一个通过JS来显示相应图片的详细信息. 需求:进入页面时,动态加载图片信息:当鼠标移动到某一图片上时,则显示该图片的大图片并显示相应说明信息:当鼠标移开图片时,清除新创建的元素. ...

  9. 连连看连接算法Javascript版

    继连连看连接算法Python版后,我将该算法移植到了Javascript上,为在浏览器版连连看做准备. 功能及使用方法参照另外一篇:连连看连接算法Python版. 值得一提的是由于Javascript ...

最新文章

  1. 干货 | 大数据人工智能领域从菜鸟到高手晋级指南
  2. 安装java时,配置环境变量classpath的作用
  3. python xlsxwriter 画图_Python XlsxWriter模块Chart类用法实例分析
  4. 合作模式歌利亚机器人_智能时代挑战下的机器人教育新方向!
  5. AndroidManifest Intent-Filter Action android:name属性
  6. 如何逼疯一名数学系学生?
  7. 7-4 统计工龄 (20 分)(C语言实现)
  8. python继承属性_Python中的属性继承问题
  9. 【5G4G】10件5G能实现但4G不能做的事情
  10. android评论数据如何返回@用户_教你如何用JavaScript来驯服服务端返回的数据
  11. Object的构造函数方法
  12. html密码至少输入6位,JS实现六位字符密码输入器功能
  13. 2017-12-3 Crontab(字符串处理)
  14. 用6种方法,教你如何解决Finder持续崩溃的问题!
  15. Python:实现password generator复杂密码生成器算法(附完整源码)
  16. Win11更新后电脑没有声音,声卡驱动失效,卸载重装依然无效
  17. C#--解析DataMatrix二维码
  18. 使用计算机的场所和用途,天天在使用计算机,很多东西我竟然不知道!
  19. 读书百客:《惜牡丹花二首》鉴赏
  20. MySQL 字段的基本操作:添加、修改和删除字段(详解)

热门文章

  1. 计算机学的建模是什么意思,cg建模是什么意思
  2. android之联网Nohttp
  3. WINDOWS无法配置此无线连接,如果您已经启用其他程序管理此无线连接,
  4. visio画图旋转任意角度,不保留白边保存pdf格式
  5. 打磨车计算机控制面板图片,一种汽车控制面板及其制作方法与流程
  6. 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)
  7. 计算机广播状态下操作,二,操作题:1
  8. 构建集团统一管控体系,低代码派上用场
  9. 微支付通道与闪电网络
  10. vue-code-diff内容过长时需要拉到底才能显示横向滚动条(滚动条不管内容长短都要让它显示,还要同步滚动)