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 相关文章推荐
javascript+iframe 实现无刷新载入整页的代码
Mar 17 Javascript
对frameset、frame、iframe的js操作示例代码
Aug 16 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
Nov 14 Javascript
js向上无缝滚动,网站公告效果 具体代码
Nov 18 Javascript
checkbox选中与未选中判断示例
Aug 04 Javascript
javascript中parseInt()函数的定义和用法分析
Dec 20 Javascript
详解AngularJS中的表达式使用
Jun 16 Javascript
浅谈JavaScript的内置对象和浏览器对象
Jun 03 Javascript
jQuery实现页面点击后退弹出提示框的方法
Aug 24 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
Nov 17 Javascript
React操作真实DOM实现动态吸底部的示例
Oct 23 Javascript
js实现百度登录窗口拖拽效果
Mar 19 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
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
PHP5.3新特性小结
2016/02/14 PHP
全面解析PHP验证码的实现原理 附php验证码小案例
2016/08/17 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
2016/10/14 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
JavaScript中令你抓狂的魔术变量
2006/11/30 Javascript
在IE6下发生Internet Explorer cannot open the Internet site错误
2010/06/21 Javascript
JavaScript小技巧 2.5 则
2010/09/12 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
Python实现处理管道的方法
2015/06/04 Python
python目录与文件名操作例子
2016/08/28 Python
Django使用HttpResponse返回图片并显示的方法
2018/05/22 Python
pycharm中使用anaconda部署python环境的方法步骤
2018/12/19 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
python pandas生成时间列表
2019/06/29 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
2019/12/27 Python
Python用input输入列表的实例代码
2020/02/07 Python
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
this关键字的作用
2016/01/30 面试题
优秀学生获奖感言
2014/02/15 职场文书
幼儿评语大全
2014/04/30 职场文书
公司市场专员岗位职责
2014/06/29 职场文书
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
2014年实习生工作总结
2014/11/27 职场文书
2014小学一年级班主任工作总结
2014/12/05 职场文书
班级管理经验交流材料
2015/11/02 职场文书