基于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操作iframe里的dom(实例讲解)
Jan 29 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
Apr 17 Javascript
javascript弹出页面回传值的方法
Jan 28 Javascript
javascript每日必学之多态
Feb 23 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
Jun 17 Javascript
微信小程序 出现错误:{&quot;baseresponse&quot;:{&quot;errcode&quot;:-80002,&quot;errmsg&quot;:&quot;&quot;}}解决办法
Feb 23 Javascript
Angular.JS中的this指向详解
May 17 Javascript
关于vue.extend和vue.component的区别浅析
Aug 16 Javascript
Vue SPA 初次进入加载动画实现代码
Nov 14 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
Nov 24 Javascript
vue+elementUI组件table实现前端分页功能
Nov 15 Javascript
mapboxgl实现带箭头轨迹线的代码
Jan 04 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 header()函数使用说明
2008/07/10 PHP
ajax实现无刷新分页(php)
2010/07/18 PHP
php实现TCP端口检测的方法
2015/04/01 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
JavaScript 拾漏补遗
2009/12/27 Javascript
jquery插件 cluetip 关键词注释
2010/01/12 Javascript
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
Bootstrap模态窗口源码解析
2017/02/08 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
jquery replace方法去空格
2017/05/08 jQuery
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
小程序云函数调用API接口的方法
2019/05/17 Javascript
微信小程序定义和调用全局变量globalData的实现
2019/11/01 Javascript
关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
2020/01/16 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
跟老齐学Python之有点简约的元组
2014/09/24 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
澳大利亚领先的在线美容商城:Adore Beauty
2017/04/14 全球购物
2013年高中生自我评价
2013/10/23 职场文书
思想政治教育专业个人求职信范文
2013/12/20 职场文书
文科教师毕业的自我评价
2014/01/16 职场文书
做一个有道德的人活动实施方案
2014/08/23 职场文书
2014年药品销售工作总结
2014/12/16 职场文书
高中运动会广播稿
2015/08/19 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android
Python如何用re模块实现简易tokenizer
2022/05/02 Python
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers