基于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 相关文章推荐
javascript中最常用的继承模式 组合继承
Aug 12 Javascript
jQuery去掉字符串起始和结尾的空格(多种方法实现)
Apr 01 Javascript
用jquery方法操作radio使其默认选项是否
Sep 10 Javascript
javascript与jquery中的this关键字用法实例分析
Dec 24 Javascript
浅谈jquery点击label触发2次的问题
Jun 12 Javascript
AngularJS 视图详解及示例代码
Aug 17 Javascript
jQuery组件easyui对话框实现代码
Aug 25 Javascript
jQuery简单实现列表隐藏和显示效果示例
Sep 12 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
Mar 17 Javascript
使用store来优化React组件的方法
Oct 23 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
Mar 03 Javascript
BootStrap table实现表格行拖拽效果
Dec 01 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检测图片木马多进制编程实践
2013/04/11 PHP
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
详解JavaScript逻辑Not运算符
2015/12/04 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
基于JS实现无缝滚动思路及代码分享
2016/06/07 Javascript
jQuery基于BootStrap样式实现无限极地区联动
2016/08/26 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
Vue微信项目按需授权登录策略实践思路详解
2018/05/07 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
Python函数返回不定数量的值方法
2019/01/22 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
Python如何实现FTP功能
2020/05/28 Python
Oracle的内存结构(Memory structures)
2015/06/10 面试题
What is EJB
2016/07/22 面试题
应届生体育教师自荐信
2013/10/03 职场文书
读书月活动方案
2014/05/22 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
婚宴主持词
2015/06/30 职场文书
CSS 实现多彩、智能的阴影效果
2021/05/12 HTML / CSS
MySQL创建管理HASH分区
2022/04/13 MySQL
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL