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 Sort 表格排序
Oct 31 Javascript
jQuery控制图片的hover效果(smartRollover.js)
Mar 18 Javascript
JavaScript对象学习经验整理
Oct 12 Javascript
jQuery中DOM树操作之复制元素的方法
Jan 23 Javascript
JavaScript取得WEB安全颜色列表的方法
Jul 14 Javascript
javascript实现自动填写表单实例简析
Dec 02 Javascript
jQuery 监控键盘一段时间没输入
Apr 22 Javascript
jquery.validate使用详解
Jun 02 Javascript
javascript匀速动画和缓冲动画详解
Oct 20 Javascript
Angular5中状态管理的实现
Sep 03 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
Sep 04 Javascript
Vue3.0数据响应式原理详解
Oct 09 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
很实用的一个完整email发送程序
2006/10/09 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
JS编程小常识很有用
2012/11/26 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
2016/12/05 Javascript
详解10分钟学会vue滚动行为
2017/09/21 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
Gulp实现静态网页模块化的方法详解
2018/01/09 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
JS定义函数的几种常用方法小结
2019/05/23 Javascript
微信小程序-可移动菜单的实现过程详解
2019/06/24 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
python 快速排序代码
2009/11/23 Python
跟老齐学Python之做一个小游戏
2014/09/28 Python
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
详解python调用cmd命令三种方法
2019/07/08 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
python,Java,JavaScript实现indexOf
2020/09/09 Python
python中pow函数用法及功能说明
2020/12/04 Python
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
企业形象策划方案
2014/05/29 职场文书
2014年班干部工作总结
2014/11/25 职场文书
南湾猴岛导游词
2015/02/09 职场文书
高中数学课堂教学反思
2016/02/18 职场文书
求职信如何撰写?
2019/05/22 职场文书
详解Django的MVT设计模式
2021/04/29 Python