基于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图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
Nov 09 Javascript
用js格式化金额可设置保留的小数位数
May 09 Javascript
JQuery做的一个简单的点灯游戏分享
Jul 16 Javascript
Node.js程序中的本地文件操作用法小结
Mar 06 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
May 30 Javascript
js友好的时间返回函数
Aug 24 Javascript
利用angular.copy取消变量的双向绑定与解析
Nov 25 Javascript
基于JavaScript实现前端数据多条件筛选功能
Aug 19 Javascript
JavaScript判断变量名是否存在数组中的实例
Dec 28 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
Oct 14 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
Apr 11 Javascript
js验证账户名是否重复
May 26 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 XML error parsing SOAP payload on line 1
2010/06/17 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
2014/06/22 PHP
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
2015/11/27 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
Nodejs 搭建简单的Web服务器详解及实例
2016/11/30 NodeJs
微信小程序 图片上传实例详解
2017/05/05 Javascript
React-Native 组件之 Modal的使用详解
2017/08/08 Javascript
JS使用正则表达式获取小括号、中括号及花括号内容的方法示例
2018/06/01 Javascript
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
Vue $attrs &amp; inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
[00:10]神之谴戒
2019/03/06 DOTA
python使用socket向客户端发送数据的方法
2015/04/29 Python
python统计日志ip访问数的方法
2015/07/06 Python
python追加元素到列表的方法
2015/07/28 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
python多进程实现文件下载传输功能
2018/07/28 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
Django实现文件上传和下载功能
2019/10/06 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
乡镇党建工作汇报材料
2014/08/14 职场文书
安全生产标语大全
2014/10/06 职场文书
公司仓库管理制度
2015/08/04 职场文书
90条交通安全宣传标语
2019/10/12 职场文书
SQL SERVER存储过程用法详解
2022/02/24 SQL Server