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 版本的文本输入框检查器Input Check
Jul 09 Javascript
js 获取浏览器高度和宽度值(多浏览器)
Sep 02 Javascript
jquery 常用操作整理 基础入门篇
Oct 14 Javascript
js的逻辑运算符 ||
May 31 Javascript
JS读写CSS样式的方法汇总
Aug 16 Javascript
jQuery实现键盘回车搜索功能
Jul 25 jQuery
node.js 发布订阅模式的实例
Sep 10 Javascript
angularJs 表格添加删除修改查询方法
Feb 27 Javascript
解决vue keep-alive 数据更新的问题
Sep 21 Javascript
JavaScript 中的无穷数(Infinity)详解
Feb 13 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
Jul 22 Javascript
JavaScript实现外溢动态爱心的效果的示例代码
Mar 21 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使用百度天气接口示例
2014/04/22 PHP
简单谈谈PHP中strlen 函数
2016/02/27 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
js调用flash的效果代码
2008/04/26 Javascript
JavaScript面象对象设计
2008/04/28 Javascript
js 解决“options为空或不是对象”
2008/12/22 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
node.js中的fs.readdirSync方法使用说明
2014/12/17 Javascript
js简单抽奖代码
2015/01/16 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
详解angular2 控制视图的封装模式
2018/12/27 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
vue 封装面包屑组件教程
2020/11/16 Javascript
基于python爬虫数据处理(详解)
2017/06/10 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
Linux 修改Python命令的方法示例
2018/12/03 Python
用Python识别人脸,人种等各种信息
2019/07/15 Python
python实现KNN分类算法
2019/10/16 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
新闻学专业大学生职业生涯规划范文
2014/03/02 职场文书
中学生旷课检讨书500字
2014/10/29 职场文书
居委会工作总结2015
2015/05/18 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书
MySQL5.7并行复制原理及实现
2021/06/03 MySQL