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 Tab 导航插件 (23个)
Jun 11 Javascript
jQuery数据缓存用法分析
Feb 20 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
Jul 10 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
Mar 12 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
Apr 26 Javascript
BootStrap 可编辑表Table格
Nov 24 Javascript
JavaScript事件方法(实例讲解)
Jun 27 Javascript
Angular4表单验证代码详解
Sep 03 Javascript
vue组件的写法汇总
Apr 12 Javascript
jquery实现的简单轮播图功能【适合新手】
Aug 17 jQuery
js实现图片推拉门效果代码实例
May 18 Javascript
angular异步验证防抖踩坑实录
Dec 01 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
人族 Terran 基本策略
2020/03/14 星际争霸
使用php shell命令合并图片的代码
2011/06/23 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
php中青蛙跳台阶的问题解决方法
2018/10/14 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
Javascript实现跑马灯效果的简单实例
2016/05/31 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
2017/01/19 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
2019/01/27 jQuery
详解JavaScript中的坐标和距离
2019/05/27 Javascript
如何让微信小程序页面之间的通信不再变困难
2019/06/03 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
简单了解JavaScript arguement原理及作用
2020/05/28 Javascript
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
Python中的localtime()方法使用详解
2015/05/22 Python
Python 字符串与二进制串的相互转换示例
2018/07/23 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
python3爬虫中异步协程的用法
2020/07/10 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
css3打造一款漂亮的卡哇伊按钮
2013/03/20 HTML / CSS
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
个人简历的自荐信
2013/10/23 职场文书
创意活动策划书
2014/01/15 职场文书
中层干部竞聘演讲稿
2014/05/15 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python
Django与数据库交互的实现
2021/06/03 Python
golang生成并解析JSON
2022/04/14 Golang