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 相关文章推荐
javascript getElementsByClassName 和js取地址栏参数
Jan 02 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
Jul 04 Javascript
jquery的相对父元素和相对文档定位示例代码
Aug 02 Javascript
jQuery获得IE版本不准确webbrowser的解决方法
Feb 23 Javascript
详解JavaScript逻辑Not运算符
Dec 04 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
May 28 Javascript
Angular 页面跳转时传参问题
Aug 01 Javascript
vue脚手架搭建过程图解
Jun 06 Javascript
JQuery判断radio单选框是否选中并获取值的方法
Jan 17 jQuery
JavaScript实现背景自动切换小案例
Sep 27 Javascript
vue.config.js中配置Vue的路径别名的方法
Feb 11 Javascript
分享15个Webpack实用的插件!!!
Mar 31 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
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
图文介绍PHP添加Redis模块及连接
2015/07/28 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
FF火狐下获取一个元素同类型的相邻元素实现代码
2012/12/15 Javascript
JS定义网页表单提交(submit)的方法
2015/03/20 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
微信小程序开发之toast提示插件使用示例
2017/06/08 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
2017/10/21 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
CKEditor4配置与开发详细中文说明文档
2018/10/08 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
小程序如何自主实现拦截器的示例代码
2019/11/04 Javascript
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
浅析Python中的序列化存储的方法
2015/04/28 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
浅谈python写入大量文件的问题
2018/11/09 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
Python多线程thread及模块使用实例
2020/04/28 Python
如何在网站上添加谷歌定位信息
2016/04/16 HTML / CSS
Giglio德国网上精品店:奢侈品服装和配件
2016/09/23 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
教你怎样写好自我评价
2013/10/05 职场文书
实习生自我鉴定范文
2013/12/05 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
网络营销计划书
2015/01/17 职场文书
《普罗米修斯》教学反思
2016/02/22 职场文书
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android