基于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刷新站IP和PV
Sep 05 Javascript
javascript实现tab响应式切换特效
Jan 29 Javascript
jQuery实现背景弹性滚动的导航效果
Jun 01 Javascript
深入理解jQuery之事件移除
Jun 02 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
Jul 09 Javascript
Javascript中作用域的详细介绍
Oct 06 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
Dec 28 Javascript
微信小程序 常用工具类详解及实例
Feb 15 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
Apr 23 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
Aug 13 Javascript
jquery 验证用户名是否重复代码实例
May 14 jQuery
js实现炫酷光感效果
Sep 05 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
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
JavaScript 仿关机效果的图片层
2008/12/26 Javascript
javascript json 新手入门文档
2009/12/03 Javascript
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
JavaScript的类型简单说明
2010/09/03 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
js鼠标点击图片切换效果代码分享
2015/08/26 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
node.js使用 http-proxy 创建代理服务器操作示例
2020/02/10 Javascript
Python中常见的异常总结
2018/02/20 Python
TensorFlow实现Softmax回归模型
2018/03/09 Python
Python中偏函数用法示例
2018/06/07 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
Python常见数字运算操作实例小结
2019/03/22 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
深入浅析Python 命令行模块 Click
2020/03/11 Python
windows上彻底删除jupyter notebook的实现
2020/04/13 Python
python 逆向爬虫正确调用 JAR 加密逻辑
2021/01/12 Python
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
同学会主持词
2014/03/18 职场文书
求职信范文大全
2014/05/26 职场文书
森林防火标语
2014/06/23 职场文书
2014最新毕业证代领委托书
2014/09/26 职场文书
初婚初育证明范本
2014/11/24 职场文书
怎样写好工作计划
2019/04/10 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
Win11怎么跳过联网验机 ?Win11跳过联网验机激活教程
2022/04/05 数码科技