javascript 快速排序函数代码


Posted in Javascript onMay 30, 2012

核心代码:

function quickSort(arr){ 
//如果数组只有一个数,就直接返回; 
if(arr.length<1){ 
return arr; 
} 
//找到中间的那个数的索引值;如果是浮点数,就向下取整 
var centerIndex = Math.floor(arr.length/2); 
//根据这个中间的数的索引值,找到这个数的值; 
var centerNum = arr.splice(centerIndex,1); 
//存放左边的数 
var arrLeft = []; 
//存放右边的数 
var arrRight = []; 
for(i=0;i<arr.length;i++){ 
if(arr[i]<centerNum){ 
arrLeft.push(arr[i]) 
}else if(arr[i]>centerNum){ 
arrRight.push(arr[i]) 
} 
} 
return quickSort(arrLeft).concat(centerNum,quickSort(arrRight)); 
}; 
var arrSort = [33,18,2,40,16,63,27]; 
var arr1 = quickSort(arrSort); 
console.log(arr1);

主要原理是:快速排序的原理:找基准点、建立二个数组分别存储、递归

基准点:就是找到这个数组中间的一个数;

建立二个数组分别存储:就是以这个基准点,将它的左右数值,分别存放到两个定义的新数组当中;

递归:在函数内部调用自身;

这里我总结的一点是在使用递归时:
1.必需要有一个判断,并且返回一个值;不然就是一个死循环了;
2.在内部调用自己的时候,传的参数是内部定义的某个变量,这个变量和初次传时来的参数,有关联;
3.要执行同样的工作,可以考虑用递归;

这是第一次执行函数的变量情况:中间数是40;根据循环里的判断条件小于40的存放在arrLeft,大于40的存放在arrRight里面。如下图

javascript 快速排序函数代码

第二次调用函数
,当执行到 return quickSort(arrLeft).concat(centerNum,quickSort(arrRight));
quickSort(arrLeft)会去调用函数,传的参数是[33,18,2,16,27]
中间数是2,比2小的放左边arrLeft,比2大的放右边arrRight

javascript 快速排序函数代码

最后再去调用quickSort(arrRight)

后面一样循环调用自己,直到传入的参数长度,小于1,就返回这个传入的参数。

Javascript 相关文章推荐
jQuery 图像裁剪插件Jcrop的简单使用
May 22 Javascript
JavaScript 学习笔记(四)
Dec 31 Javascript
JavaScript prototype属性使用说明
May 13 Javascript
jQuery中:focus选择器用法实例
Dec 30 Javascript
JavaScript实现给定时间相加天数的方法
Jan 25 Javascript
浅析Javascript ES6新增值比较函数Object.is
Aug 24 Javascript
轻松实现js选项卡切换效果
Sep 24 Javascript
原生JavaScrpit中异步请求Ajax实现方法
Nov 03 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
Mar 22 Javascript
JQuery通过后台获取数据遍历到前台的方法
Aug 13 jQuery
详解KOA2如何手写中间件(装饰器模式)
Oct 11 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
Nov 30 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
May 30 #Javascript
Chosen 基于jquery的选择框插件使用方法
May 30 #Javascript
基于jquery的鼠标拖动效果代码
May 30 #Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
May 30 #Javascript
基于jQuery的倒计时实现代码
May 30 #Javascript
基于jquery的放大镜效果
May 30 #Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
May 27 #Javascript
You might like
曾在DC漫画界反派角色扮演的演员,谁才是你心目中的小丑之王?
2020/04/09 欧美动漫
PHP 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
PHP自动生成后台导航网址的最佳方法
2013/08/27 PHP
php判断用户是否关注微信公众号
2016/07/22 PHP
PHP实现发送微博消息功能完整示例
2019/12/04 PHP
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
2016/05/10 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
2017/12/19 Javascript
node.js环境搭建图文详解
2018/09/19 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
解决python爬虫中有中文的url问题
2018/05/11 Python
Python读取指定日期邮件的实例
2019/02/01 Python
python ChainMap的使用和说明详解
2019/06/11 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
Django日志及中间件模块应用案例
2020/09/10 Python
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
校庆活动方案
2014/03/31 职场文书
三年级班级文化建设方案
2014/05/04 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
反腐倡廉剖析材料
2014/09/30 职场文书
环卫工作个人总结
2015/03/04 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
学校教学管理制度
2015/08/06 职场文书
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL