Javascript实现快速排序(Quicksort)的算法详解


Posted in Javascript onSeptember 06, 2015

目前,最常见的排序算法大概有七八种,其中"快速排序"(Quicksort)使用得最广泛,速度也较快。它是图灵奖得主C. A. R. Hoare(1934--)于1960时提出来的。

"快速排序"的思想很简单,整个排序过程只需要三步

(1)在数据集之中,选择一个元素作为"基准"(pivot)。

(2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。

(3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

举例来说,现在有一个数据集{85, 24, 63, 45, 17, 31, 96, 50},怎么对其排序呢?

第一步,选择中间的元素45作为"基准"。(基准值可以任意选择,但是选择中间的值比较容易理解。)

Javascript实现快速排序(Quicksort)的算法详解

第二步,按照顺序,将每个元素与"基准"进行比较,形成两个子集,一个"小于45",另一个"大于等于45"。

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);

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));
};
 
var dataArray = [85,24,63,45,17,31,96,50];
console.log(dataArray.join(","));
console.log(quickSort(dataArray).join(","));

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
Highslide.js是一款基于js实现的网页中图片展示插件
Mar 30 Javascript
js 图片缩放(按比例)控制代码
May 27 Javascript
JavaScript的eval JSON object问题
Nov 15 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
Aug 26 Javascript
JS判断iframe是否加载完成的方法
Aug 03 Javascript
AngularJS利用Controller完成URL跳转
Aug 09 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
Oct 21 Javascript
js仿微信公众平台打标签功能
Apr 08 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
Sep 14 Javascript
微信小程序dom操作的替代思路实例分析
Dec 06 Javascript
vue组件中实现嵌套子组件案例
Aug 31 Javascript
uni-app 微信小程序授权登录的实现步骤
Feb 18 Javascript
简单谈谈javascript Date类型
Sep 06 #Javascript
Js制作点击输入框时默认文字消失的效果
Sep 05 #Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
Sep 05 #Javascript
jQuery焦点图轮播特效代码分享(3款)
Sep 05 #Javascript
javascript日期操作详解(脚本之家整理)
Sep 05 #Javascript
javascript中日期函数new Date()的浏览器兼容性问题
Sep 05 #Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
Sep 05 #Javascript
You might like
风格模板初级不完全修改教程
2006/10/09 PHP
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
Javascript常用字符串判断函数代码分享
2014/12/08 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
2016/10/25 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
基于vue的下拉刷新指令和滚动刷新指令
2016/12/23 Javascript
JS正则匹配中文的方法示例
2017/01/06 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
vue-cli中打包图片路径错误的解决方法
2017/10/26 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
python 七种邮件内容发送方法实例
2014/04/22 Python
python中查看变量内存地址的方法
2015/05/05 Python
探究Python中isalnum()方法的使用
2015/05/18 Python
浅谈对yield的初步理解
2017/05/29 Python
Python subprocess模块功能与常见用法实例详解
2018/06/28 Python
Python2和Python3.6环境解决共存问题
2018/11/09 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
python 日志 logging模块详细解析
2020/03/31 Python
收藏!10个免费高清视频素材网站!【设计、视频剪辑必备】
2021/03/18 杂记
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
应届生会计求职信
2013/11/11 职场文书
推荐信模板
2014/05/09 职场文书
优秀求职信
2014/05/29 职场文书
教师节感恩老师演讲稿
2014/08/28 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
导游词之上饶龟峰
2019/10/25 职场文书