JavaScript实现快速排序的方法分析


Posted in Javascript onJanuary 10, 2018

本文实例讲述了JavaScript实现快速排序的方法。分享给大家供大家参考,具体如下:

思想:

通过分治思想、递归方法将数据依次分解为包含较小元素和较大元素的不同子序列

1.在数组中选择一个元素为基准

2.对数组进行遍历,小于基准的元素都移到基准的左边,大于基准的元素都移到基准的右边

3.对基准左边和右边的两个子集,不断重复前两步,直到所有子集只剩下一个元素为止

实现代码:

function sqort(arr){
 if(arr.length===0){
 return [];
}
var left=[];
var right=[];
var pivot=arr[0];//(基准以首元素)
for(var i=1;i<arr.length;i++){
 if(arr[i]<pivot){
 left.push(arr[i]);
}else{
 right.push(arr[i]);
}
}
return sqort(left).concat(pivot,qsort(right));//递归
}
var a=[];
for (i=0;i<10;++i){
a[i]=Math.floor(Math.random()*100+1);
}
console.log(a);
console.log(sqort(a));
//(基准以中间元素的情况)
function sqort(arr){
 if(arr.length<=1){
 return arr;
}
var left=[];
var right=[];
var pivotIndex=Math.floor(arr.length/2);
var pivot=arr.splice(pivotIndex,1)[0];//(基准以中间元素)
for(var i=1;i<arr.length;i++){
 if(arr[i]<pivot){
 left.push(arr[i]);
}else{
 right.push(arr[i]);
}
}
return sqort(left).concat(pivot,sqort(right));//递归
}
var a=[12,34,23,78,34,26];
console.log(a);
console.log(sqort(a));

注:  对于较小数组和较大数组分别递归调用sqort()函数,当递归结束时候,再将较小的数组与基准以及较大的数组连接起来形成最终的有序数组并返回。

Javascript 相关文章推荐
js利用Array.splice实现Array的insert/remove
Jan 13 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
Dec 08 Javascript
初识Node.js
Mar 20 Javascript
jquery zTree异步加载简单实例讲解
Feb 25 Javascript
JavaScript实现图片自动加载的瀑布流效果
Apr 11 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
May 09 Javascript
解读Bootstrap v4 sass设计
May 29 Javascript
javascript中sort排序实例详解
Jul 24 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
Jan 20 Javascript
深究AngularJS之ui-router详解
Jun 13 Javascript
浅析Javascript中双等号(==)隐性转换机制
Oct 27 Javascript
JavaScript实现移动端拖动元素
Nov 24 Javascript
jQuery第一次运行页面默认触发点击事件的实例
Jan 10 #jQuery
js推箱子小游戏步骤代码解析
Jan 10 #Javascript
vue select二级联动第二级默认选中第一个option值的实例
Jan 10 #Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
Jan 10 #Javascript
Vue+jquery实现表格指定列的文字收缩的示例代码
Jan 09 #jQuery
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
Jan 09 #Javascript
10个经典的网页鼠标特效代码
Jan 09 #Javascript
You might like
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
使用eAccelerator加密PHP程序
2008/10/03 PHP
php实现斐波那契数列的简单写法
2014/07/19 PHP
php中Y2K38的漏洞解决方法实例分析
2014/09/22 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
利用PHP生成静态html页面的原理
2016/09/30 PHP
PHP微信分享开发详解
2017/01/14 PHP
PDO::commit讲解
2019/01/27 PHP
jQuery学习笔记之DOM对象和jQuery对象
2010/12/22 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
JS实现留言板功能[楼层效果展示]
2017/12/27 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
[00:12]2018DOTA2亚洲邀请赛 sylar表现SOLO技艺
2018/04/06 DOTA
[47:26]完美世界DOTA2联赛 LBZS vs Forest 第二场 11.07
2020/11/09 DOTA
ptyhon实现sitemap生成示例
2014/03/30 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
澳大利亚领先的在线美容商店:Facial Co
2017/10/22 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
error和exception有什么区别
2012/10/02 面试题
人事档案接收函
2014/01/12 职场文书
父亲八十大寿答谢词
2014/01/23 职场文书
社区义诊活动总结
2014/04/30 职场文书
募捐倡议书怎么写
2014/05/14 职场文书
驻村工作先进事迹
2014/08/14 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
村党总支部公开承诺书2016
2016/03/25 职场文书
MySQL入门命令之函数-单行函数-流程控制函数
2021/04/05 MySQL
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python