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 相关文章推荐
Highcharts 非常实用的Javascript统计图demo示例
Jul 03 Javascript
利用jquery包将字符串生成二维码图片
Sep 12 Javascript
html dom节点操作(获取/修改/添加或删除)
Jan 23 Javascript
js中运算符&amp;&amp; 和 || 的使用记录
Aug 21 Javascript
javascript实现图片循环渐显播放的方法
Feb 24 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
Jan 10 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
Sep 06 jQuery
js中getBoundingClientRect的作用及兼容方案详解
Feb 01 Javascript
详解小程序原生使用ES7 async/await语法
Aug 06 Javascript
vue element-ui之怎么封装一个自己的组件的详解
May 20 Javascript
JS实现判断数组是否包含某个元素示例
May 24 Javascript
vue下canvas裁剪图片实例讲解
Apr 16 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
MVC模式的PHP实现
2006/10/09 PHP
php自动加载的两种实现方法
2010/06/21 PHP
php数组转换js数组操作及json_encode的用法详解
2013/10/26 PHP
php 邮件发送问题解决
2014/03/22 PHP
php中ftp_chdir与ftp_cdup函数用法
2014/11/18 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
php插入mysql数据返回id的方法
2018/05/31 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
jquery实现类似淘宝星星评分功能实例
2014/09/12 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
Nodejs 微信小程序消息推送的实现
2021/01/20 NodeJs
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
Python六大开源框架对比
2015/10/19 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
parser.add_argument中的action使用
2020/04/20 Python
京东国际站:JOYBUY
2017/11/23 全球购物
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
中间件分为哪几类
2012/03/14 面试题
高中考试作弊检讨书
2014/01/14 职场文书
铁路个人事迹材料
2014/01/30 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
服装设计师求职信
2014/06/04 职场文书
中职毕业生自我鉴定
2014/09/13 职场文书
党员个人剖析材料
2014/09/30 职场文书
张丽莉观后感
2015/06/16 职场文书
如何用python反转图片,视频
2021/04/24 Python
使用golang编写一个并发工作队列
2021/05/08 Golang
Go 语言中 20 个占位符的整理
2021/10/16 Golang