基于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 闭包究竟是什么
Apr 12 Javascript
JavaScript实现QueryString获取GET参数的方法
Jul 02 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
Aug 01 Javascript
javascript如何动态加载表格与动态添加表格行
Nov 27 Javascript
jquery 鼠标滑动显示详情应用示例
Jan 24 Javascript
js中的触发事件对象event.srcElement与event.target详解
Mar 15 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
Aug 22 Javascript
JS实现获取自定义属性data值的方法示例
Dec 19 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
Mar 16 jQuery
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
Mar 17 Javascript
vue3中的组件间通信
Mar 31 Vue.js
深入浅析React中diff算法
May 19 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实现的登录页面信息提示功能示例
2017/07/24 PHP
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
jquery $.ajax入门应用二
2008/11/19 Javascript
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
js 内存释放问题
2010/04/25 Javascript
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
JS获取URL中的参数数据
2013/12/05 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
js获取鼠标点击的位置实现思路及代码
2014/05/09 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
2016/06/01 Javascript
localStorage实现便签小程序
2016/11/28 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
基于JSON数据格式详解
2017/08/31 Javascript
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
全新打包工具parcel零配置vue开发脚手架
2018/01/11 Javascript
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
python实现图片文件批量重命名
2020/03/23 Python
python扫描线填充算法详解
2020/02/19 Python
在python里创建一个任务(Task)实例
2020/04/25 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
初一体育教学反思
2014/01/29 职场文书
天鹅的故事教学反思
2014/02/04 职场文书
竞选卫生委员演讲稿
2014/04/28 职场文书
大学优秀班主任事迹材料
2014/05/02 职场文书
社区禁毒工作方案
2014/06/02 职场文书
团干部培训方案
2014/06/03 职场文书
英语教研活动总结
2014/07/02 职场文书
2015年见习期个人工作总结
2015/05/28 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
win10搭建配置ftp服务器的方法
2022/08/05 Servers