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将从数据库中读取出来的日期型格式化为想要的类型。
Aug 15 Javascript
JavaScript与Div对层定位和移动获得坐标的实现代码
Sep 08 Javascript
javascript检查浏览器是否支持flash的实现代码
Aug 14 Javascript
JavaScript必知必会(六) delete in instanceof
Jun 08 Javascript
Vue.js实现微信过渡动画左右切换效果
Jun 13 Javascript
javascript将list转换成树状结构的实例
Sep 08 Javascript
vue按需加载组件webpack require.ensure的方法
Dec 13 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
Jul 24 jQuery
脚手架vue-cli工程webpack的作用和特点
Sep 29 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
Oct 16 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
Sep 18 Javascript
原生JS实现拖拽功能
Dec 16 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执行速度全攻略(下)
2006/10/09 PHP
Php部分常见问题总结
2006/10/09 PHP
为查询结果建立向后/向前按钮
2006/10/09 PHP
谈谈 PHP7新增功能
2015/12/16 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
JS构造函数与原型prototype的区别介绍
2016/07/04 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
关于angularJs指令的Scope(作用域)介绍
2016/10/25 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
Python2中的raw_input() 与 input()
2015/06/12 Python
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
Python趣味入门教程之循环语句while
2020/08/26 Python
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
英语师范专业毕业生自荐信
2013/09/21 职场文书
知识竞赛活动方案
2014/02/18 职场文书
成龙洗发水广告词
2014/03/14 职场文书
企业标语口号
2014/06/10 职场文书
自查自纠工作情况报告
2014/10/29 职场文书
社会实践活动报告
2015/02/05 职场文书
培训简讯范文
2015/07/20 职场文书
不知如何爱孩子,这些方法教会您
2019/08/06 职场文书
java设计模式--建造者模式详解
2021/07/21 Java/Android