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 相关文章推荐
WordPress 插件——CoolCode使用方法与下载
Jul 02 Javascript
js更优雅的兼容
Aug 12 Javascript
打印json对象的内容及JSON.stringify函数应用
Mar 29 Javascript
JS实现多物体缓冲运动实例代码
Nov 29 Javascript
jquery默认校验规则整理
Mar 24 Javascript
超级好用的jQuery圆角插件 Corner速成
Aug 31 Javascript
JS实现网页上随机产生超链接地址的方法
Nov 09 Javascript
vue,angular,avalon这三种MVVM框架优缺点
Apr 27 Javascript
js 自带的sort() 方法全面了解
Aug 16 Javascript
详解利用Angular实现多团队模块化SPA开发框架
Nov 27 Javascript
小程序实现订单倒计时功能
Apr 23 Javascript
js中Map和Set的用法及区别实例详解
Feb 15 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 日期时间函数的高级应用技巧
2009/10/10 PHP
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
2013/06/03 PHP
PHP面向对象精要总结
2014/11/07 PHP
PHP实现从远程下载文件的方法
2015/03/12 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
2016/10/11 PHP
Symfony2针对输入时间进行查询的方法分析
2017/06/28 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
优化javascript的执行速度
2010/01/23 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
jQuery处理xml格式的返回数据(实例解析)
2013/11/28 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
EasyUI布局 高度自适应
2016/06/04 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
jQuery如何封装输入框插件
2016/08/19 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
Ionic + Angular.js实现图片轮播的方法示例
2017/05/21 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
VUE 全局变量的几种实现方式
2018/08/22 Javascript
VUE-cli3使用 svg-sprite-loader
2018/10/20 Javascript
详解基于node.js的脚手架工具开发经历
2019/01/28 Javascript
webpack HappyPack实战详解
2019/10/08 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
jquery实现穿梭框功能
2021/01/19 jQuery
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
Python基于PycURL实现POST的方法
2015/07/25 Python
Python3.X 线程中信号量的使用方法示例
2017/07/24 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
安全资金保障制度
2014/01/23 职场文书
宣传保护环境的公益广告词
2014/03/13 职场文书
租房协议书范文
2014/08/20 职场文书
爱国主义教育演讲稿
2014/08/26 职场文书