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 相关文章推荐
让iframe自适应高度(支持XHTML,支持FF)
Jul 24 Javascript
学习ExtJS table布局
Oct 08 Javascript
JS实现div内部的文字或图片自动循环滚动代码
Apr 19 Javascript
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
Aug 18 Javascript
详解js私有作用域中创建特权方法
Jan 25 Javascript
jQuery无缝轮播图代码
Dec 22 Javascript
浅谈js中的变量名和函数名重名
Feb 13 Javascript
vuex 项目结构目录及一些简单配置介绍
Apr 08 Javascript
深入了解JavaScript代码覆盖
Jun 13 Javascript
layui--select使用以及下拉框实现键盘选择的例子
Sep 24 Javascript
uni-app从安装到卸载的入门教程
May 15 Javascript
vue 动态添加class,三个以上的条件做判断方式
Nov 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
关于PHP模板Smarty的初级使用方法以及心得分享
2013/06/21 PHP
php中call_user_func函数使用注意事项
2014/11/21 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
php求今天、昨天、明天时间戳的简单实现方法
2016/07/28 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
jQuery prev ~ siblings选择器使用介绍
2013/08/09 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
优化Jquery,提升网页加载速度
2013/11/14 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
JavaScript闭包_动力节点Java学院整理
2017/06/27 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
React进阶学习之组件的解耦之道
2017/08/07 Javascript
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
[34:27]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第一局
2016/02/26 DOTA
Python映射拆分操作符用法实例
2015/05/19 Python
python SVD压缩图像的实现代码
2019/11/05 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
使用Python封装excel操作指南
2021/01/29 Python
htnl5利用svg页面高斯模糊的方法
2018/07/20 HTML / CSS
免税水晶:Duty Free Crystal
2019/05/13 全球购物
国际商务专业学生个人的自我评价
2013/09/28 职场文书
外语专业毕业生个人的自荐信
2013/11/19 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
村创先争优活动总结
2014/08/28 职场文书
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫
Python字符串常规操作小结
2022/04/03 Python