基于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的获得各种控件Value的方法
Nov 19 Javascript
学习JavaScript正则表达式
Nov 13 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
May 09 Javascript
JavaScript九九乘法口诀表的简单实现
Oct 04 Javascript
两种简单的跨域方法(jsonp、php)
Jan 02 Javascript
jQuery实现简单的回到顶部totop功能示例
Oct 16 jQuery
element-ui upload组件多文件上传的示例代码
Oct 17 Javascript
vue下载excel的实现代码后台用post方法
May 10 Javascript
vue2 拖动排序 vuedraggable组件的实现
Aug 08 Javascript
javascript 设计模式之组合模式原理与应用详解
Apr 08 Javascript
Node.js API详解之 readline模块用法详解
May 22 Javascript
Echarts如何重新渲染实例详解
May 30 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查询ip所在地的方法
2014/12/05 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
ext 同步和异步示例代码
2009/09/18 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
js弹出div并显示遮罩层
2014/02/12 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
2016/07/27 Javascript
AngularJS实现标签页的两种方式
2016/09/05 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
在Vue中使用highCharts绘制3d饼图的方法
2018/02/08 Javascript
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
2019/06/04 jQuery
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
Layui选项卡制作历史浏览记录的方法
2019/09/28 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
python getopt 参数处理小示例
2009/06/09 Python
Python中的文件和目录操作实现代码
2011/03/13 Python
Python实现的金山快盘的签到程序
2013/01/17 Python
Python进程通信之匿名管道实例讲解
2015/04/11 Python
Tornado 多进程实现分析详解
2018/01/12 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
详解Python是如何实现issubclass的
2019/07/24 Python
Django配置文件代码说明
2019/12/04 Python
奖学金自我鉴定范文
2013/10/03 职场文书
个人求职简历中英文自我评价
2013/12/16 职场文书
会计主管岗位职责
2014/01/03 职场文书
母亲七十大寿答谢词
2014/01/18 职场文书
高三高考决心书
2014/03/11 职场文书
2014年终工作总结范本
2014/12/15 职场文书
教师辞职书范文
2015/02/26 职场文书
第一书记观后感
2015/06/08 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书