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 相关文章推荐
JQuery 绑定事件时传递参数的实现方法
Oct 13 Javascript
JavaScript版TAB选项卡效果实例
Aug 16 Javascript
Jquery实现自定义弹窗示例
Mar 12 Javascript
9款2014最热门jQuery实用特效推荐
Dec 07 Javascript
jQuery实现跨域
Feb 03 Javascript
jQuery版本升级踩坑大全
Jan 12 Javascript
js只执行1次的函数示例
Jul 20 Javascript
javascript 四十条常用技巧大全
Sep 09 Javascript
jQuery remove()过滤被删除的元素(推荐)
Jul 18 jQuery
搭建element-ui的Vue前端工程操作实例
Feb 23 Javascript
在layui.use 中自定义 function 的正确方法
Sep 16 Javascript
5个你不知道的JavaScript字符串处理库(小结)
Jun 01 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
php数据库备份还原类分享
2014/03/20 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
php数组指针操作详解
2017/02/14 PHP
简单的无缝滚动程序-仅几行代码
2007/05/08 Javascript
Js callBack 返回前一页的js方法
2008/11/30 Javascript
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
js showModalDialog参数的使用详解
2014/01/07 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
温故知新——JavaScript中的字符串连接问题最全总结(推荐)
2017/08/21 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
python发送arp欺骗攻击代码分析
2014/01/16 Python
把MySQL表结构映射为Python中的对象的教程
2015/04/07 Python
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
Python pymongo模块用法示例
2018/03/31 Python
python基础教程项目三之万能的XML
2018/04/02 Python
Django实现表单验证
2018/09/08 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
Python imutils 填充图片周边为黑色的实现
2020/01/19 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
2020/03/14 Python
基于Tensorflow一维卷积用法详解
2020/05/22 Python
Django之腾讯云短信的实现
2020/06/12 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
C# Debug和Testing相关面试题
2015/10/25 面试题
《大禹治水》教学反思
2014/04/27 职场文书
三月学雷锋月活动总结
2014/04/28 职场文书
党的群众路线教育实践活动对照检查材料思想汇报
2014/09/19 职场文书
幼儿园辞职书
2015/02/26 职场文书
清明节寄语2015
2015/03/23 职场文书
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL