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 相关文章推荐
Windows Live的@live.com域名注册漏洞 利用代码
Dec 27 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
Jun 25 Javascript
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
Aug 27 Javascript
Javascript学习笔记-详解in运算符
Sep 13 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
Apr 02 Javascript
jQuery通过Ajax返回JSON数据
Apr 28 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
May 25 Javascript
微信小程序 详解下拉加载与上拉刷新实现方法
Jan 13 Javascript
微信小程序实现点击返回顶层的方法
Jul 12 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
Jan 25 jQuery
微信 jssdk 签名错误invalid signature的解决方法
Jan 14 Javascript
使用mixins实现elementUI表单全局验证的解决方法
Apr 02 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
各种战术和打法的原创者
2020/03/04 星际争霸
用Flash图形化数据(一)
2006/10/09 PHP
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
PHP实现文件上传功能实例代码
2017/05/18 PHP
浅析PHP开发规范
2018/02/05 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
详解webpack + react + react-router 如何实现懒加载
2017/11/20 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
vue 登录滑动验证实现代码
2018/08/24 Javascript
[01:32]2014DOTA2西雅图邀请赛 CIS我们有信心进入正赛
2014/07/08 DOTA
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python生成数字图片代码分享
2017/10/31 Python
一道python走迷宫算法题
2018/01/22 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
迟到检讨书400字
2014/01/13 职场文书
周年庆典主持词
2014/04/02 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
2014国庆节标语口号
2014/09/19 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
初婚未育证明样本
2015/06/18 职场文书
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android