基于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 相关文章推荐
鼠标经过的文本框textbox变色
May 21 Javascript
Javascript UrlDecode函数代码
Jan 09 Javascript
js图片向右一张张滚动效果实例代码
Nov 23 Javascript
js操作css属性实现div层展开关闭效果的方法
May 11 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
Jun 28 Javascript
Bootstrap组合上、下拉框简单实现代码
Mar 06 Javascript
JS闭包可被利用的常见场景小结
Apr 09 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
Mar 01 Javascript
js实现移动端轮播图
Dec 21 Javascript
uniapp实现可以左右滑动导航栏
Oct 21 Javascript
详解Vue的异步更新实现原理
Dec 22 Vue.js
JavaScript 绘制饼图的示例
Feb 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
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
php 设计模式之 单例模式
2008/12/19 PHP
Zend 输出产生XML解析错误
2009/03/03 PHP
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
thinkphp获取栏目和文章当前位置的方法
2014/10/29 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
JavaScript 异步调用框架 (Part 4 - 链式调用)
2009/08/04 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
使用pdb模块调试Python程序实例
2015/06/02 Python
Python查询阿里巴巴关键字排名的方法
2015/07/08 Python
python如何实现反向迭代
2018/03/20 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
python中如何打包用户自定义模块
2020/09/23 Python
为您的家、后院、车库等在线购物:Spreetail
2019/06/17 全球购物
沙特阿拉伯电子产品和家用电器购物网站:Black Box
2019/07/24 全球购物
游戏商店:Eneba
2020/04/25 全球购物
介绍一下linux文件系统分配策略
2012/11/17 面试题
如何通过 CSS 写出火焰效果
2021/03/24 HTML / CSS
生物学专业求职信
2014/07/23 职场文书
员工生日活动方案
2014/08/24 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
暑期社会实践证明书
2014/11/17 职场文书
离职信范文
2015/06/23 职场文书
JS setTimeout与setInterval的区别
2022/04/20 Javascript