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 相关文章推荐
JS 无法通过W3C验证的处理方法
Mar 09 Javascript
jquery中EasyUI实现异步树
Mar 01 Javascript
js检测判断日期大于多少天的方法
May 04 Javascript
在Python中使用glob模块查找文件路径的方法
Jun 17 Javascript
javascript作用域问题实例分析
Jul 13 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
May 18 Javascript
js代码延迟一定时间后执行一个函数的实例
Feb 15 Javascript
jackson解析json字符串,首字母大写会自动转为小写的方法
Dec 22 Javascript
Vue父子组件之间的通信实例详解
Sep 28 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
Jan 23 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
Jan 22 Javascript
JS JQuery获取data-*属性值方法解析
Sep 01 jQuery
使用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 IP及IP段进行访问限制的代码
2008/12/17 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
jquery mobile实现拨打电话功能的几种方法
2013/08/05 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
2013/11/25 Javascript
jQuery操作表单常用控件方法小结
2015/03/23 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
JavaScript中removeChild 方法开发示例代码
2016/08/15 Javascript
AngularJS学习笔记之表单验证功能实例详解
2017/07/06 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
linux下安装easy_install的方法
2013/02/10 Python
python中argparse模块用法实例详解
2015/06/03 Python
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
Python中音频处理库pydub的使用教程
2017/06/07 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
Python数据类型之Set集合实例详解
2019/05/07 Python
numpy按列连接两个维数不同的数组方式
2019/12/06 Python
AHAVA美国官方网站:死海海泥护肤品牌
2016/10/18 全球购物
世界领先的在线地板和建筑材料批发商:BuildDirect
2017/02/26 全球购物
Brydge英国:适用于Apple iPad和Microsoft Surface Pro的蓝牙键盘
2019/05/16 全球购物
捷克多品牌在线时尚商店:ANSWEAR.cz
2020/10/03 全球购物
合同专员岗位职责
2013/12/18 职场文书
2014年纪委工作总结
2014/12/05 职场文书
生日赠语
2015/06/23 职场文书
公司档案管理制度
2015/08/05 职场文书
中秋节祝酒词
2015/08/12 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书
MySQL Server层四个日志的实现
2022/03/31 MySQL