基于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 相关文章推荐
js变量以及其作用域详解
Jul 18 Javascript
JavaScript将Table导出到Excel实现思路及代码
Mar 13 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
Aug 23 Javascript
BootStrap tooltip提示框使用小结
Oct 26 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
Dec 06 Javascript
Angular2监听页面大小变化的解决方法
Oct 09 Javascript
vue实现模态框的通用写法推荐
Feb 26 Javascript
详解webpack import()动态加载模块踩坑
Jul 17 Javascript
详解Vue用cmd创建项目
Feb 12 Javascript
Koa 中的错误处理解析
Apr 09 Javascript
详解微信小程序获取当前时间及日期的方法
Apr 28 Javascript
Python机器学习之决策树和随机森林
Jul 15 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基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
PHP6连接SQLServer2005的三部曲
2016/04/15 PHP
使用js获取QueryString的方法小结
2010/02/28 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
浅析JS运动
2015/12/28 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
2016/09/20 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
js实现漫天星星效果
2017/01/19 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
JS非行间样式获取函数的实例代码
2018/06/05 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
python通过邮件服务器端口发送邮件的方法
2015/04/30 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
python解析xml简单示例
2019/06/21 Python
扩展Django admin的list_filter()可使用范围方法
2019/08/21 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
python实现门限回归方式
2020/02/29 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
捷克时尚网上商店:OTTO
2018/03/15 全球购物
路政管理毕业自荐书范文
2014/02/10 职场文书
销售类求职信
2014/06/13 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
趣味运动会通讯稿
2015/07/18 职场文书
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server
redis数据结构之压缩列表
2022/03/21 Redis
第四次工业革命,打工人与机器人的竞争
2022/04/21 数码科技