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 相关文章推荐
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
May 17 Javascript
让元素在网页中可拖动示例代码
Aug 13 Javascript
jquery预览图片实现鼠标放上去显示实际大小
Jan 16 Javascript
js读取被点击次数的简单实例(从数据库中读取)
Mar 07 Javascript
JavaScript将取代AppleScript?
Sep 18 Javascript
基于jquery实现放大镜效果
Aug 17 Javascript
jquery SweetAlert插件实现响应式提示框
Aug 18 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
Nov 24 Javascript
基于three.js编写的一个项目类示例代码
Jan 05 Javascript
使用JS获取SessionStorage的值
Jan 12 Javascript
vue使用keep-alive保持滚动条位置的实现方法
Apr 09 Javascript
JavaScript实现猜数字游戏
May 20 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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
php程序效率优化的一些策略小结
2010/07/17 PHP
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
php中AES加密解密的例子小结
2014/02/18 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
js中将字符串转换成json的三种方式
2011/01/12 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
javascript倒计时效果实现
2015/11/12 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
写了个监控nginx进程的Python脚本
2012/05/10 Python
python登陆asp网站页面的实现代码
2015/01/14 Python
Python中优化NumPy包使用性能的教程
2015/04/23 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
用python打印菱形的实操方法和代码
2019/06/25 Python
pandas分区间,算频率的实例
2019/07/04 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
在python中实现求输出1-3+5-7+9-......101的和
2020/04/02 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
广州盈通面试题
2015/12/05 面试题
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题