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 函数式编程
Aug 16 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
Apr 02 Javascript
Jquery的each里用return true或false代替break或continue
May 21 Javascript
一个JavaScript处理textarea中的字符成每一行实例
Sep 22 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
Feb 20 Javascript
JavaScript中join()方法的使用简介
Jun 09 Javascript
写给小白的JavaScript引擎指南
Dec 04 Javascript
js简单判断flash是否加载完成的方法
Jun 21 Javascript
AngularJS基础 ng-include 指令简单示例
Aug 01 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
Nov 23 Javascript
JS 调用微信扫一扫功能
Dec 22 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
May 11 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初学者头疼问题总结
2006/07/08 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
2014/01/03 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
javascript面向对象特性代码实例
2014/06/12 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
浅谈javascript alert和confirm的美化
2016/12/15 Javascript
浅析vue给不同环境配置不同打包命令
2018/08/17 Javascript
vue proxy 的优势与使用场景实现
2020/06/15 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
2020/08/06 Javascript
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
python图像处理入门(一)
2019/04/04 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
python+numpy实现的基本矩阵操作示例
2019/07/19 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
python help函数实例用法
2020/12/06 Python
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
澳大利亚购买太阳镜和眼镜网站:Glamoureyes
2020/09/22 全球购物
证婚人搞笑证婚词
2014/01/10 职场文书
优秀交警事迹材料
2014/01/26 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
教师党员个人自我评价
2015/03/04 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
党员转正党支部意见
2015/06/02 职场文书
2019旅游导游工作总结
2019/06/27 职场文书
查看nginx配置文件路径和资源文件路径的方法
2021/03/31 Servers
Python中使用Lambda函数的5种用法
2021/04/01 Python
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android