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代码简单实现求杨辉三角给定行的最大值
Oct 29 Javascript
js字母大小写转换实现方法总结
Nov 13 Javascript
JS:window.onload的使用介绍
Nov 13 Javascript
javascript 原型链维护和继承详解
Nov 26 Javascript
jquery解析json格式数据的方法(对象、字符串)
Nov 24 Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
Jan 26 Javascript
AngularJS Bootstrap详细介绍及实例代码
Jul 28 Javascript
JavaScript实现数组降维详解
Jan 05 Javascript
jQuery读取XML文件的方法示例
Feb 03 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
Apr 10 Javascript
通过JS判断网页是否为手机打开
Oct 28 Javascript
javascript数组includes、reduce的基本使用
Jul 02 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
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
PHP函数eval()介绍和使用示例
2014/08/20 PHP
PHP错误机制知识汇总
2016/03/24 PHP
PHP赋值的内部是如何跑的详解
2019/01/13 PHP
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
javascript将数字转换整数金额大写的方法
2015/01/27 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
jquery实现简单文字提示效果
2015/12/02 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
windows 下安装nodejs 环境变量设置
2017/02/02 NodeJs
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
Flask框架的学习指南之制作简单blog系统
2016/11/20 Python
python爬虫爬取某站上海租房图片
2018/02/04 Python
Python中交换两个元素的实现方法
2018/06/29 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
用Python自动清理系统垃圾的实现
2021/01/18 Python
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
师范应届生教师求职信
2013/11/05 职场文书
房地产财务管理制度
2014/02/02 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书
cf收人广告词
2014/03/14 职场文书
个人自我剖析材料
2014/09/30 职场文书
2014最新股权信托合同协议书
2014/11/18 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书
vue使用watch监听属性变化
2022/04/30 Vue.js