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常用自定义公共函数汇总
Jan 15 Javascript
js获取浏览器基本信息大全
Nov 27 Javascript
JavaScript设计模式之工厂方法模式介绍
Dec 28 Javascript
javascript先序遍历DOM树的方法
Feb 27 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
Jan 16 Javascript
AngularJS页面传参的5种方式
Apr 01 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
Jun 13 Javascript
如何把vuejs打包出来的文件整合到springboot里
Jul 26 Javascript
layui结合form,table的全选、反选v1.0示例讲解
Aug 15 Javascript
vue3修改link标签默认icon无效问题详解
Oct 09 Javascript
基于javascript的无缝滚动动画实现2
Aug 07 Javascript
JavaScript 定时器详情
Nov 11 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
10条PHP编程习惯助你找工作
2008/09/29 PHP
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
JavaScript模块随意拖动示例代码
2014/05/27 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
jQuery ajax的功能实现方法详解
2017/01/06 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
nuxt+axios解决前后端分离SSR的示例代码
2017/10/24 Javascript
vue2.0 datepicker使用方法
2018/02/04 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
2018/08/24 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
python通过colorama模块在控制台输出彩色文字的方法
2015/03/19 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
Linux下python3.7.0安装教程
2018/07/30 Python
python实现图片识别汽车功能
2018/11/30 Python
Python读取表格类型文件代码实例
2020/02/17 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
如何利用python进行时间序列分析
2020/08/04 Python
Python3+Django get/post请求实现教程详解
2021/02/16 Python
详解HTML5中的Communication API基本使用方法
2016/01/29 HTML / CSS
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
.NET面试题:什么是反射
2016/09/30 面试题
执行力心得体会
2013/12/31 职场文书
大学生创业计划书怎么写
2014/09/15 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
《曾国藩家书》读后感——读家书,立家风
2019/08/21 职场文书