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 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
Oct 11 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
Aug 09 Javascript
javascript预加载图片、css、js的方法示例介绍
Oct 14 Javascript
JavaScript中具名函数的多种调用方式总结
Nov 08 Javascript
AngularJs bootstrap搭载前台框架——基础页面
Sep 01 Javascript
使用jquery实现的循环连续可停顿滚动实例
Nov 23 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
Jan 18 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
Aug 17 Javascript
微信小程序checkbox组件使用详解
Jan 31 Javascript
vue响应式系统之observe、watcher、dep的源码解析
Apr 09 Javascript
4 种滚动吸顶实现方式的比较
Apr 09 Javascript
js实现九宫格抽奖
Mar 19 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中调用ASP.NET的WebService的代码
2011/04/22 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
php检测apache mod_rewrite模块是否安装的方法
2015/03/14 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
2017/03/12 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
javascript面向对象特性代码实例
2014/06/12 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
Javascript连接Access数据库完整实例
2015/08/03 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
基于jquery实现下拉框美化特效
2016/02/02 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
vue实现pdf导出解决生成canvas模糊等问题(推荐)
2018/10/18 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
python 数据加密代码
2008/12/24 Python
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
Python re正则表达式元字符分组()用法分享
2020/02/10 Python
python和php哪个更适合写爬虫
2020/06/22 Python
python如何写个俄罗斯方块
2020/11/06 Python
python 实现图片批量压缩的示例
2020/12/18 Python
python 实现IP子网计算
2021/02/18 Python
纯CSS实现的大小渐变、渐远效果
2014/04/15 HTML / CSS
个人应聘自我评价分享
2013/11/18 职场文书
学生处主任岗位职责
2013/12/01 职场文书
成品仓管员工作职责
2013/12/29 职场文书
中秋节主持词
2014/04/02 职场文书
遗嘱格式范本
2015/08/07 职场文书