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 相关文章推荐
JXTree对象,读取外部xml文件数据,生成树的函数
Apr 02 Javascript
js直接编辑当前cookie的脚本
Sep 14 Javascript
js编码、解码函数介绍及其使用示例
Sep 05 Javascript
浅析jquery某一元素重复绑定的问题
Jan 03 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
Aug 17 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
Sep 11 Javascript
javascript实现加载xml文件的方法
Nov 24 Javascript
Javascript实现苹果悬浮虚拟按钮
Apr 10 Javascript
jQuery使用$.each遍历json数组的简单实现方法
Apr 18 Javascript
详解vue组件基础
May 04 Javascript
node Buffer缓存区常见操作示例
May 04 Javascript
详解JS深拷贝与浅拷贝
Aug 04 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 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
php下连接mssql2005的代码
2011/01/17 PHP
php实现mysql数据库操作类分享
2014/02/14 PHP
PHP两种快速排序算法实例
2015/02/15 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
零基础学JavaScript最新动画教程+iso光盘下载
2008/01/22 Javascript
常用的javascript function代码
2008/05/23 Javascript
javascript中的数字与字符串相加实例分析
2011/08/14 Javascript
JS+CSS实现自适应选项卡宽度的圆角滑动门效果
2015/09/15 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
详解vue-router 初始化时做了什么
2018/06/11 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
小程序实现密码输入框
2020/11/16 Javascript
如何在JavaScript中使用localStorage详情
2021/02/04 Javascript
python中cPickle用法例子分享
2014/01/03 Python
bpython 功能强大的Python shell
2016/02/16 Python
详谈python http长连接客户端
2017/06/12 Python
Python文本处理之按行处理大文件的方法
2018/04/09 Python
Python类的继承用法示例
2019/01/31 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
python自动生成model文件过程详解
2019/11/02 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
python Shapely使用指南详解
2020/02/18 Python
python 通过邮件控制实现远程控制电脑操作
2020/03/16 Python
学前教育专业求职信
2014/09/02 职场文书
民间借贷借条范本
2015/05/25 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书
Javascript设计模式之原型模式详细
2021/10/05 Javascript