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 相关文章推荐
精选的10款用于构建良好易用性网站的jQuery插件
Jan 23 Javascript
调用HttpHanlder的几种返回方式小结
Dec 20 Javascript
js实现按钮控制图片360度翻转特效的方法
Feb 17 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
May 19 Javascript
JS时间特效最常用的三款
Aug 19 Javascript
浅谈javascript中的三种弹窗
Oct 21 Javascript
ES6新特性之Object的变化分析
Mar 31 Javascript
js绑定事件和解绑事件
Apr 27 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
Jul 17 Javascript
mongoose更新对象的两种方法示例比较
Dec 19 Javascript
swiper动态改变滑动内容的实现方法
Jan 17 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
Nov 11 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写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
javascript 继承实现方法
2009/08/26 Javascript
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
2015/03/10 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
基于javascript html5实现3D翻书特效
2016/03/14 Javascript
jQuery使用each方法与for语句遍历数组示例
2016/06/16 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
2019/10/11 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
Python检测数据类型的方法总结
2019/05/20 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
在keras 中获取张量 tensor 的维度大小实例
2020/06/10 Python
python 调整图片亮度的示例
2020/12/03 Python
大学生饮食配送创业计划书
2014/01/04 职场文书
一年级班主任感言
2014/03/08 职场文书
小学阳光体育活动总结
2014/07/05 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
交通安全学习心得体会
2016/01/18 职场文书
Python Pandas 删除列操作
2022/03/16 Python