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 相关文章推荐
双击滚屏-常用推荐
Nov 29 Javascript
window.open()弹出居中的窗口
Feb 01 Javascript
jQuery 点击图片跳转上一张或下一张功能的实现代码
Mar 12 Javascript
基于jquery自定义图片热区效果
Jul 21 Javascript
热点新闻滚动特效的js代码
Aug 17 Javascript
js实现连续英文字符自动换行兼容ie6 ie7和firefox
Sep 06 Javascript
jQuery中has()方法用法实例
Jan 06 Javascript
vue.js中npm安装教程图解
Apr 10 Javascript
详解关于element级联选择器数据回显问题
Feb 20 Javascript
小程序测试后台服务的方法(ngrok)
Mar 08 Javascript
vue使用showdown并实现代码区域高亮的示例代码
Oct 17 Javascript
Ajax异步刷新功能及简单案例
Nov 20 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中实现生成静态文件的方法缓解服务器压力
2014/01/07 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
用javascript连接access数据库的方法
2006/11/17 Javascript
JavaScript 权威指南(第四版) 读书笔记
2009/08/11 Javascript
向当前style sheet中插入一个新的style实现方法
2013/04/01 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
2016/12/23 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
2017/03/03 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
python实现计算倒数的方法
2015/07/11 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
python 追踪except信息方式
2020/04/25 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
利用异或运算实现两个无符号数的加法运算
2013/12/20 面试题
开办加工厂创业计划书
2014/01/03 职场文书
物流仓储计划书
2014/01/10 职场文书
物流合作计划书
2014/01/10 职场文书
环境工程专业自荐信
2014/03/03 职场文书
共产党员公开承诺书范文
2014/03/28 职场文书
国际贸易专业求职信
2014/06/04 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
党性观念心得体会
2014/09/03 职场文书
《少年闰土》教学反思
2016/02/18 职场文书