JavaScript算法系列之快速排序(Quicksort)算法实例详解


Posted in Javascript onSeptember 04, 2016

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

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

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

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

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

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

JavaScript算法系列之快速排序(Quicksort)算法实例详解

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

JavaScript算法系列之快速排序(Quicksort)算法实例详解

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

JavaScript算法系列之快速排序(Quicksort)算法实例详解

JavaScript算法系列之快速排序(Quicksort)算法实例详解

JavaScript算法系列之快速排序(Quicksort)算法实例详解

JavaScript算法系列之快速排序(Quicksort)算法实例详解

下面参照网上的资料(这里和这里),用Javascript语言实现上面的算法。

首先,定义一个quickSort函数,它的参数是一个数组。

var quickSort = function(arr) {
};

然后,检查数组的元素个数,如果小于等于1,就返回。

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

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

var quickSort = function(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 = [];
};

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

var quickSort = function(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]);


}

}
};

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

var quickSort = function(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算法系列之快速排序(Quicksort)算法实例详解

以上所述是小编给大家介绍的JavaScript算法系列之快速排序(Quicksort)算法实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js 为label标签和div标签赋值的方法
Aug 08 Javascript
jquery实现倒计时代码分享
Jun 13 Javascript
一个字符串反转函数可实现字符串倒序
Sep 15 Javascript
Validform+layer实现漂亮的表单验证特效
Jan 17 Javascript
JS实现的跨浏览器解析XML文件实例
Jun 21 Javascript
js实现上传文件添加和删除文件选择框
Oct 24 Javascript
原生js实现轮播图
Feb 27 Javascript
vue实现简单表格组件实例详解
Apr 16 Javascript
Angular实现图片裁剪工具ngImgCrop实践
Aug 17 Javascript
JS实现水平移动与垂直移动动画
Dec 19 Javascript
JS实现长图上下滚动效果
Mar 19 Javascript
详解element上传组件before-remove钩子问题解决
Apr 08 Javascript
jQuery中ScrollTo用法示例
Sep 04 #Javascript
jQuery与JS加载事件用法分析
Sep 04 #Javascript
jQuery轮播图效果精简版完整示例
Sep 04 #Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
Sep 04 #Javascript
jQuery实现的自定义弹出层效果实例详解
Sep 04 #Javascript
JS简单实现仿百度控制台输出信息效果
Sep 04 #Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
Sep 04 #Javascript
You might like
PHP数据库操作面向对象的优点
2006/10/09 PHP
apache+php+mysql安装配置方法小结
2010/08/01 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
php中Session的生成机制、回收机制和存储机制探究
2014/08/19 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
php导出中文内容excel文件类实例
2015/07/06 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
微信小程序错误this.setData报错及解决过程
2019/09/18 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
使用python实现baidu hi自动登录的代码
2013/02/10 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
Python 从相对路径下import的方法
2018/12/04 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
canvas使用注意点总结
2013/07/19 HTML / CSS
以特惠价提供在线奢侈品购物:FRMODA.com
2018/01/25 全球购物
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
2014年银行年终工作总结
2014/12/19 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
工作简报怎么写
2015/07/21 职场文书
部门主管竞聘书
2015/09/15 职场文书
《搭石》教学反思
2016/02/18 职场文书
七年级作文之环保作文
2019/10/17 职场文书