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 相关文章推荐
网上抓的一个特效
May 11 Javascript
JavaScript 对象的属性和方法4种不同的类型
Mar 19 Javascript
js jquery数组介绍
Jul 15 Javascript
javascript数字格式化通用类 accounting.js使用
Aug 24 Javascript
asp.net中System.Timers.Timer的使用方法
Mar 20 Javascript
jQuery实现用户注册的表单验证示例
Aug 28 Javascript
javascript获得当前的信息的一些常用命令
Feb 25 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
Oct 23 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
Aug 02 Javascript
D3.js实现饼状图的方法详解
Sep 21 Javascript
vue使用keep-alive实现数据缓存不刷新
Oct 21 Javascript
详解js的作用域、预解析机制
Feb 05 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
php数组函数序列之array_search()- 按元素值返回键名
2011/11/04 PHP
php+mysql大量用户登录解决方案分析
2014/12/29 PHP
PHP中each与list用法分析
2016/01/08 PHP
JSON语法五大要素图文介绍
2012/12/04 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
使用jQuery jqPlot插件绘制柱状图
2014/12/18 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
JavaScript简单判断复选框是否选中及取出值的方法
2015/08/13 Javascript
chrome调试javascript详解
2015/10/21 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
js String.prototype.trim字符去前后空格的扩展
2020/08/23 Javascript
实现一个Vue自定义指令懒加载的方法示例
2020/06/04 Javascript
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
如何启动时不需输入用户名与密码
2014/05/09 面试题
27个经典Linux面试题及答案,你知道几个?
2013/01/10 面试题
商务英语专业自荐信
2013/10/14 职场文书
售后专员岗位职责
2013/12/08 职场文书
企事业单位求职者的自我评价
2013/12/28 职场文书
数学检讨书1000字
2014/02/24 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
2015年度班主任自我评价
2015/03/11 职场文书
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技