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 学习之旅 (2)
Feb 05 Javascript
Js判断CSS文件加载完毕的具体实现
Jan 17 Javascript
JavaScript数据类型检测代码分享
Jan 26 Javascript
Javascript中拼接大量字符串的方法
Feb 05 Javascript
JS获取表格内指定单元格html内容的方法
Mar 31 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
May 20 Javascript
jQuery remove()过滤被删除的元素(推荐)
Jul 18 jQuery
JS实现评价的星星功能
Aug 20 Javascript
Node 自动化部署的方法
Oct 17 Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
Mar 12 Javascript
微信小程序实现简易table表格
Jun 19 Javascript
js里面的变量范围分享
Jul 18 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/11/07 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
Javascript保存网页为图片借助于html2canvas库实现
2014/09/05 Javascript
javascript实现youku的视频代码自适应宽度
2015/05/25 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
NodeJs生成sitemap站点地图的方法示例
2019/06/11 NodeJs
Java Varargs 可变参数用法详解
2020/01/28 Javascript
用js实现放大镜效果
2020/10/28 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
python检测服务器是否正常
2014/02/16 Python
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
python根据url地址下载小文件的实例
2018/12/18 Python
详解用python写一个抽奖程序
2019/05/10 Python
python shutil文件操作工具使用实例分析
2019/12/25 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
Python偏函数实现原理及应用
2020/11/20 Python
Python json解析库jsonpath原理及使用示例
2020/11/25 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
PHP数据运算类型都有哪些
2013/11/05 面试题
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
会计电算化个人自我评价
2013/11/17 职场文书
后勤人员岗位职责
2013/12/17 职场文书
新驾驶员个人自我评价
2014/01/03 职场文书
《雾凇》教学反思
2014/02/17 职场文书
反腐倡廉主题教育活动总结
2015/05/07 职场文书
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript