排序算法(Sorting algorithm)是计算机科学最古老、最基本的课题之一。要想成为合格的程序员,就必须理解和掌握各种排序算法。

快速排序(Quicksort)是对冒泡排序的一种改进。

快速排序在诸多算法排序中可能不是最好的, 但个人认为在JS语言实现中是最快的。几千条数据的数组在firefox下快速排序的速度比冒泡、插入排序快3至4秒。

"快速排序"的思想很简单,整个排序过程只需要三步:

(1)在数据集之中,选择一个元素作为"基准"(pivot)。

(2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。

(3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

举例来说,现在有一个数据集{85, 24, 63, 45, 17, 31, 96, 50},怎么对其排序呢?

第一步,选择中间的元素45作为"基准"。(基准值可以任意选择,但是选择中间的值比较容易理解。)

第二步,按照顺序,将每个元素与"基准"进行比较,形成两个子集,一个"小于45",另一个"大于等于45"。

第三步,对两个子集不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

用Javascript语言实现上面的算法。

第一步:定义一个quickSort函数,它的参数是一个数组。

function quickSort(arr) {};

第二步:检查数组的元素个数,如果小于等于1,就返回。

function quickSort(arr) {if (arr.length <= 1) { return arr; }};

第三步:选择"基准"(pivot),并将其与原数组分离,再定义两个空数组,用来存放一左一右的两个子集。

function quickSort(arr) {if (arr.length <= 1) { return arr; }var pivotIndex = Math.floor(arr.length / 2) ;var pivot = arr.splice(pivotIndex, 1)[0];var left = [];var right = [];};

第四部:开始遍历数组,小于"基准"的元素放入左边的子集,大于基准的元素放入右边的子集。

function quickSort(arr){if(arr.length<=1){return arr;}//基数的索引var pivotIndex = Math.floor(arr.length/2); var pivot = arr.splice(pivotIndex, 1)[0];var left = [], right = []; //遍历数组,小于基准数的元素放入左边的子集,大于基准数的放入右边的子集for(let i = 0;i<arr.length;i++){if(arr[i]<pivot){left.push(arr[i]);} else{right.push(arr[i]);}}
}

第五步:使用递归不断重复这个过程,就可以得到排序后的数组。

function quickSort(arr) {if (arr.length <= 1) { return arr; }var pivotIndex = Math.floor(arr.length / 2);var pivot = arr.splice(pivotIndex, 1)[0];var left = [];var right = [];for (var i = 0; i < arr.length; i++){if (arr[i] < pivot) {left.push(arr[i]);} else {right.push(arr[i]);}}//递归调用排序左侧和右侧的元素return quickSort(left).concat([pivot], quickSort(right));
}

使用的时候,直接调用quickSort()就行了。

相关阅读

JavaScript的排序算法——冒泡排序
JavaScript的排序算法——选择排序
JavaScript的排序算法——插入排序
JavaScript的排序算法——归并排序
JavaScript的排序算法——快速排序

JavaScript的排序算法——快速排序相关推荐

  1. 排序算法 | 快速排序,算法的图解、实现、复杂度和稳定性分析与优化

    今天讲解一下快速排序算法的原理以及实现.复杂度和稳定性分析与优化 目录 1 快速排序的原理 2 快速排序代码实现 3 复杂度和稳定性分析.优化 4 习题练习 1 快速排序的原理 快速排序是所有内部排序 ...

  2. 排序算法 快速排序 python 0913

    排序算法 快速排序 python 0913 快速排序 思路 定义快排方法 接收参数:原始列表,起始位置,终止位置 判断是否符合快排条件,当起始下标与终止下标相等时,代表只有一个元素,无法排序,退出 一 ...

  3. 排序算法 快速排序【详细步骤图解】

    排序算法 快速排序[详细步骤图解] 快速排序 主要思想 图解 第一轮分割序列 第二轮分割序列 --- 左子序列 小结 第三轮分割序列 --- 右子序列 C++实现 总结 快速排序 给定一个序列:22 ...

  4. 【图解算法】排序算法——快速排序

    简介 首先还是得简单的介绍一下快速排序这个算法. 快速排序(Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下, ...

  5. 十大经典排序算法-快速排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  6. javascript常用排序算法总结

    算法是程序的灵魂.虽然在前端的开发环境中排序算法不是很经常用到,但常见的排序算法还是应该要掌握的.我在这里从网上整理了一下常见排序算法的javascript实现,方便以后查阅. 归并排序: 1 fun ...

  7. JavaScript实现排序算法

    排序算法主要用在元素的数组排序,常见的排序算法有冒泡排序.选择排序.插入排序.希尔排序.快速排序.归并排序等.这些排序算法都可以用JavaScript实现.下面的排序算法都假设是从小到大进行排序,从大 ...

  8. 用openAI写个js的排序算法(快速排序算法)

    文章目录 一.生成JS快速排序算法 二.openai还会给出调用方法 一.生成JS快速排序算法 这是一个通用的 JavaScript 排序算法.它使用的是快速排序算法. function sort(a ...

  9. 排序算法---快速排序(java版)

    快速排序 原理 快速排序(Quick Sort)算法,简称快排,利用的也是分治的思想,快排的思路是:如果要对 m->n 之间的数列进行排序,我们选择 m->n 之间的任意一个元素数据作为分 ...

最新文章

  1. 网页效率之DNS查找和并行下载
  2. 【imx6】libipu.so.0说明
  3. Cell子刊:粘上你-细菌生长素介导的植物根部细菌定殖
  4. 如何从C#中的通用方法返回NULL?
  5. IT民工创业之殇---续1
  6. 关注点分离之RestTemplate的错误处理
  7. C语言经典例35-字符串反转
  8. Graph Neural Networks: A Review of Methods and Applications(Semantic Segmentation应用解读)
  9. github 检查代码质量_Android(8): 代码质量检查
  10. The Two Routes CodeForces - 601A(水最短路)
  11. Quartz.NET作业调度框架详解
  12. Xcode 7 3打包注意事项
  13. 查询mysql 中的空文本_MySQL查询以显示空列的自定义文本
  14. 用户可以使用三种方式使用计算机,计算机操作系统期末复习笔记
  15. 建好ftp服务器后怎么从客户端更改密码?
  16. Java反射机制深度剖析
  17. P1969 积木大赛
  18. 博弈论分析题_“博弈论”习题及参考答案
  19. 单体架构与微服务架构(英文)
  20. 面试时应该问公司一些什么问题?

热门文章

  1. itextsharp php,将页码添加到pdf文档(itextsharp)
  2. 数据加密:你应该知道的数仓安全
  3. 鸿蒙可以安装安卓app吗,华为鸿蒙支持安卓应用吗 华为鸿蒙OS适配应用有哪些
  4. python程序设置头像_Django+JS 实现点击头像即可更改头像的方法示例
  5. 【抓包】网易云音乐WEB端歌曲评论接口分析
  6. 2023 4月份 华为硬件开发岗位实习生机考回忆
  7. wps office文档明明保存的文件第二天消失了,历史记录中也找不到
  8. C# 批量修改图片尺寸和DPI
  9. 今天模仿网页版制作的来电模拟器微信小程序源码带流量主
  10. 解决Read timed out和connect timed out的问题