基于javascript实现的快速排序


Posted in Javascript onDecember 02, 2016
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 相关文章推荐
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
Oct 15 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
Mar 26 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
May 07 Javascript
利用jQuery中的ajax分页实现代码
Feb 25 Javascript
JavaScript File分段上传
Mar 10 Javascript
js原生之焦点图转换加定时器实例
Dec 12 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
Dec 17 Javascript
详解vue使用$http服务端收不到参数
Apr 19 Javascript
微信小程序登陆注册功能的实现代码
Dec 10 Javascript
vue 实现根据data中的属性值来设置不同的样式
Aug 04 Javascript
js实现网页随机验证码
Oct 19 Javascript
javascript对象3个属性特征
Nov 17 Javascript
微信公众平台开发教程(五)详解自定义菜单
Dec 02 #Javascript
基于jQuery实现滚动切换效果
Dec 02 #Javascript
遍历json 对象的属性并且动态添加属性的实现
Dec 02 #Javascript
Vue.js组件tree实现无限级树形菜单
Dec 02 #Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
Dec 02 #Javascript
Vue.js第四天学习笔记
Dec 02 #Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
Dec 02 #Javascript
You might like
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
2019/02/27 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
javascript replace方法与正则表达式
2008/02/19 Javascript
jQuery 开天辟地入门篇一
2009/12/09 Javascript
仅用[]()+!等符号就足以实现几乎任意Javascript代码
2010/03/01 Javascript
javascript操作字符串的原生方法
2014/12/22 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
vue项目中引入noVNC远程桌面的方法
2018/03/05 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
WebGL three.js学习笔记之阴影与实现物体的动画效果
2019/04/25 Javascript
python实现上传样本到virustotal并查询扫描信息的方法
2014/10/05 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
深入浅析python with语句简介
2018/04/11 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
2019/08/09 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
资源工程专业毕业生求职信
2014/02/27 职场文书
药剂专业求职信
2014/06/20 职场文书
幼儿教师小班个人总结
2015/02/05 职场文书
nginx七层负载均衡配置详解
2022/07/15 Servers