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面象对象设计
Apr 28 Javascript
动态载入/删除/更新外部 JavaScript/Css 文件的代码
Jul 03 Javascript
js 优化次数过多的循环 考虑到性能问题
Mar 05 Javascript
jquery中EasyUI使用技巧小结
Feb 10 Javascript
js简单的点击返回顶部效果实现方法
Apr 10 Javascript
js数组依据下标删除元素
Apr 14 Javascript
基于jQuery倒计时插件实现团购秒杀效果
May 13 Javascript
全面解析Bootstrap中transition、affix的使用方法
May 30 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
Nov 22 Javascript
angularJs在多个控制器中共享服务数据的方法
Sep 30 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
Mar 10 Javascript
vue选项卡切换的实现案例
Apr 11 Vue.js
使用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/10/09 PHP
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
php目录操作实例代码
2014/02/21 PHP
php获取四位字母和数字的随机数的实现方法
2015/01/09 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
js操作Xml(向服务器发送Xml,处理服务器返回的Xml)(IE下有效)
2009/01/30 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
javascript上传图片前预览图片兼容大多数浏览器
2013/10/25 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
微信通过页面(H5)直接打开本地app的解决方法
2017/09/09 Javascript
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
K-近邻算法的python实现代码分享
2017/12/09 Python
Django学习笔记之ORM基础教程
2018/03/27 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
Python实现寻找回文数字过程解析
2020/06/09 Python
Python持续监听文件变化代码实例
2020/07/22 Python
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
澳大利亚购买太阳镜和眼镜网站:Glamoureyes
2020/09/22 全球购物
美术专业学生个人自我评价
2013/09/19 职场文书
2014社区三八妇女节活动方案
2014/03/30 职场文书
趣味运动会广播稿
2014/09/13 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
2015年学校远程教育工作总结
2015/07/20 职场文书
小组组名及励志口号
2015/12/24 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js
spring boot中nativeQuery的用法
2021/07/26 Java/Android
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
2021/08/02 MySQL