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 相关文章推荐
CSS+JS构建的图片查看器
Jul 22 Javascript
JavaScript 权威指南(第四版) 读书笔记
Aug 11 Javascript
jQuery Selector选择器小结
May 06 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
Jan 04 Javascript
js控制web打印(局部打印)方法整理
May 29 Javascript
jQuery截取指定长度字符串代码
Aug 21 Javascript
jQuery中not()方法用法实例
Jan 06 Javascript
JS实现仿FLASH效果的竖排导航代码
Sep 15 Javascript
javascript实现tab切换的两个实例
Nov 05 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
Apr 29 Javascript
简单学习5种处理Vue.js异常的方法
Jun 17 Javascript
小程序中this.setData的使用和注意事项
Aug 28 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
咖啡语言
2021/03/03 咖啡文化
PHP安全技术之 实现php基本安全
2010/09/04 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
javascript里的条件判断
2007/02/27 Javascript
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
javascript replace()正则替换实现代码
2010/02/26 Javascript
node.js中的fs.appendFile方法使用说明
2014/12/17 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
2014/12/29 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
JS中如何实现复选框全选功能
2016/12/19 Javascript
微信小程序 本地存储及登录页面处理实例详解
2017/01/11 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
2017/01/23 Javascript
js仿淘宝商品放大预览功能
2017/03/15 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
微信小程序云开发之使用云数据库
2019/05/17 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
Python利用QQ邮箱发送邮件的实现方法(分享)
2017/06/09 Python
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
2020/04/22 Python
Python 防止死锁的方法
2020/07/29 Python
python3中for循环踩过的坑记录
2020/12/14 Python
CSS3 特效范例整理
2011/08/22 HTML / CSS
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
促销活动计划书
2014/05/02 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
打架检讨书
2015/01/27 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python
Python序列化与反序列化相关知识总结
2021/06/08 Python