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 相关文章推荐
数组Array进行原型prototype扩展后带来的for in遍历问题
Feb 07 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
Sep 06 Javascript
利用JS延迟加载百度分享代码,提高网页速度
Jul 01 Javascript
Jquery 动态循环输出表格具体方法
Nov 23 Javascript
js图片延迟技术一般的思路与示例
Mar 20 Javascript
jQuery选择器用法实例详解
Dec 17 Javascript
jQuery添加和删除输入文本框标签代码
May 20 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
Jul 22 jQuery
vue项目中jsonp跨域获取qq音乐首页推荐问题
May 30 Javascript
jQuery使用each遍历循环的方法
Sep 19 jQuery
原理深度解析Vue的响应式更新比React快
Apr 04 Javascript
基于PHP pthreads实现多线程代码实例
Jun 24 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
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
PHP测试框架PHPUnit组织测试操作示例
2018/05/28 PHP
详解PHP变量传值赋值和引用赋值变量销毁
2019/03/23 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
基于jquery的滑动样例代码
2010/11/20 Javascript
js对象数组按属性快速排序
2011/01/31 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
2013/08/13 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
快速掌握jQuery插件开发
2017/01/19 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
2018/05/31 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
Python中类的定义、继承及使用对象实例详解
2015/04/30 Python
Python二分查找详解
2015/09/13 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
python with语句的原理与用法详解
2020/03/30 Python
Python 实现简单的客户端认证
2020/07/29 Python
Python3爬虫中关于中文分词的详解
2020/07/29 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
HTML5是什么 HTML5是什么意思 HTML5简介
2012/10/26 HTML / CSS
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
啤酒销售实习自我鉴定
2013/09/24 职场文书
个人收入证明范本
2014/01/12 职场文书
建筑工地宣传标语
2014/06/18 职场文书
环保志愿者活动总结
2014/06/27 职场文书
庆元旦活动总结
2014/07/09 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
销售督导岗位职责
2015/04/10 职场文书
2015年资料员工作总结
2015/04/25 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
css3 文字断裂效果
2022/04/22 HTML / CSS