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 相关文章推荐
OfflineSave离线保存代码再次发布使用说明
May 23 Javascript
jquery动态增加删除表格行的小例子
Nov 14 Javascript
js时间比较示例分享(日期比较)
Mar 05 Javascript
JavaScript中发布/订阅模式的简单实例
Nov 05 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
Aug 15 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
May 30 Javascript
JavaScript遍历求解数独问题的主要思路小结
Jun 12 Javascript
js实现千分符和保留几位小数的简单实例
Aug 01 Javascript
AngularJS $http post 传递参数数据的方法
Oct 09 Javascript
微信小程序8种数据通信的方式小结
Feb 03 Javascript
Vue封装全局过滤器Filters的步骤
Sep 16 Javascript
vue组件入门知识全梳理
Sep 21 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和ACCESS写聊天室(十)
2006/10/09 PHP
PHP通用分页类page.php[仿google分页]
2008/08/31 PHP
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
2009/10/29 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
javascript 文档的编码问题解决
2009/03/01 Javascript
location.href用法总结(最主要的)
2013/12/27 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
javascript添加前置0(补零)的几种方法
2017/01/05 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
React之PureComponent的使用作用
2018/07/10 Javascript
Vue watch响应数据实现方法解析
2020/07/10 Javascript
[01:32]2014DOTA2西雅图邀请赛 CIS我们有信心进入正赛
2014/07/08 DOTA
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
Python 从attribute到property详解
2020/03/05 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
外贸主管求职简历的自我评价
2013/10/23 职场文书
酒店中秋节活动方案
2014/01/31 职场文书
文明和谐家庭事迹材料
2014/05/18 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
初婚初育证明范本
2014/11/24 职场文书
人力资源部岗位职责
2015/02/11 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
2015年防灾减灾工作总结
2015/07/24 职场文书
大学副班长竞选稿
2015/11/21 职场文书
用python开发一款操作MySQL的小工具
2021/05/12 Python
MySQL中出现乱码问题的终极解决宝典
2021/05/26 MySQL
Pytorch中使用ImageFolder读取数据集时忽略特定文件
2022/03/23 Python