基于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表单验证插件(jquery.validate.js)的3种使用方式
Mar 28 Javascript
jquery操作angularjs对象
Jun 26 Javascript
JavaScript如何获取数组最大值和最小值
Nov 18 Javascript
JQuery Mobile实现导航栏和页脚
Mar 09 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
Dec 16 Javascript
简单实现js选项卡切换效果
Feb 09 Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
Apr 11 Javascript
react 父组件与子组件之间的值传递的方法
Sep 14 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
Mar 05 Javascript
微信小程序仿微信运动步数排行(交互)
Jul 13 Javascript
Vue中点击active并第一个默认选中功能的实现
Feb 24 Javascript
详解Vue之事件处理
Jul 10 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 file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
Yii2框架类自动加载机制实例分析
2018/05/02 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
Vue cli 引入第三方JS和CSS的常用方法分享
2018/01/20 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
Python基于有道实现英汉字典功能
2015/07/25 Python
python删除列表内容
2015/08/04 Python
python之Character string(实例讲解)
2017/09/25 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
Dockers美国官方网站:卡其裤、男士服装、鞋及配件
2016/11/22 全球购物
英国休闲奢华的缩影:Crew Clothing
2019/05/05 全球购物
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
C#公司笔试题
2014/03/28 面试题
用Java语言将一个键盘输入的数字转化成中文输出
2013/01/25 面试题
质检员的岗位职责
2013/11/15 职场文书
啦啦队口号大全
2014/06/16 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
公司离职证明标准样本
2014/10/05 职场文书
委托书的样本
2015/01/28 职场文书
转变工作作风心得体会
2016/01/23 职场文书