基于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 相关文章推荐
jQueryUI的Dialog的简单封装
Jun 07 Javascript
Jquery attr(&quot;checked&quot;) 返回checked或undefined 获取选中失效
Oct 10 Javascript
JavaScript设置获取和设置属性的方法
Mar 04 Javascript
有关json_decode乱码及NULL的问题
Oct 13 Javascript
详解javascript数组去重问题
Nov 06 Javascript
js实现无缝循环滚动
Jun 23 Javascript
原生js实现验证码功能
Mar 16 Javascript
Vue.js中数据绑定的语法教程
Jun 02 Javascript
AngularJS自定义指令详解(有分页插件代码)
Jun 12 Javascript
vue中使用ueditor富文本编辑器
Feb 08 Javascript
jQuery实现基本隐藏与显示效果的方法详解
Sep 05 jQuery
创建nuxt.js项目流程图解
Mar 13 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经典的给图片加水印程序
2006/12/06 PHP
PHP 向右侧拉菜单实现代码,测试使用中
2009/11/03 PHP
php 接口类与抽象类的实际作用
2009/11/26 PHP
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
JS实现的Select三级下拉菜单代码
2015/08/20 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
基于JavaScript实现回到页面顶部动画代码
2016/05/24 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
vue+element实现批量删除功能的示例
2018/02/28 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
在python中的socket模块使用代理实例
2014/05/29 Python
Django中使用locals()函数的技巧
2015/07/16 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
python对视频画框标记后保存的方法
2018/12/07 Python
深入解析神经网络从原理到实现
2019/07/26 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
5款实用的python 工具推荐
2020/10/13 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
使用HTML5做个画图板的方法介绍
2013/05/03 HTML / CSS
三年大学生活自我鉴定
2014/01/21 职场文书
《会变的花树叶》教学反思
2014/02/10 职场文书
社区工作感言
2014/02/21 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
数学教研活动总结
2014/07/02 职场文书
会计学专业求职信
2014/07/17 职场文书
道歉信怎么写
2015/05/12 职场文书
《包身工》教学反思
2016/02/23 职场文书
pytest配置文件pytest.ini的详细使用
2021/04/17 Python