基本原理:
  1、从一个数组中任意挑选一个元素作为中轴元素;
  2、将剩下的元素以中轴元素作为比较的标准,将小于等于中轴元素的放到中轴元素的左边,将大于中轴元素的放到中轴元素的右边;
  3、以当前中轴元素的位置为界,将左半部分子数组和右半部分子数组看成两个新的数组
  4、重复上述操作,直到子数组的元素个数小于等于1(因为一个元素的数组必定是有序的)。 var quickSort = function (arr) {
if (arr.length <= 1) {//如果数组长度为1,返回数组
return arr;
}
var pivotIndex = Math.floor(arr.length / 2);//取中轴位置
var pivot = arr.splice(pivotIndex, 1);//取中轴位置的元素
var left = []; //定义左边数组
var right = []; //定义右边数组
for (var i = 0; i < arr.length; i++) {//遍历数组
if (arr[i] < pivot) {//遍历数组每个数与中轴元素值比较大小
left.push(arr[i]);//小于中轴元素值放在左边数组
} else {
right.push(arr[i]);//大于中轴元素值放在右边数组
}
}
return quickSort(left).concat([pivot], quickSort(right));//递归以上操作,对左右数组进行排序,直到左边或者右边数组长度小于等于1
};
  • Math.floor( )方法:是向下取整计算,它返回的是小于或等于函数参数,并且与之最接近的整数。例如:var x = Math.floor(2.6); x = 2;
       var x = Math.floor(0.6); x = 0;
       var x = Math.floor(5.1); x = 5;
       var x = Math.floor(-5.1); x = -6;
       var x = Math.floor(-5.9); x = -6;
  • splice( )方法:方法向(从)数组中添加(删除)项目,然后返回被删除的项目。

     注释:该方法会改变原始数组。

    •       var arr = [1,2,3,4,5];

           arr.splice(2,0,"A");

           arr = [1,2,A,3,4,5];

      

    •       var arr = [1,2,3,4,5];

           arr.splice(2,1,"A");

           arr = [1,2,A,4,5];

    •       var arr = [1,2,3,4,5];

          arr.splice(2,3,"A");

          arr = [1,2,A];

  • concat( )方法:用于连接两个或多个数组。不会改变现有的数组,只会返回被连接数组的一个副本。
  • 递归:在运行的过程中调用自己。就是包子馅的包子,极限是变成馒头。

时间复杂度:最优O(n2);最差O(nlogn);平均O(nlogn);

空间复杂度:最优O(logn) ;最差O(n);

												

快速排序——JavaScript实现的更多相关文章

  1. 快速排序 javascript实现

    Quicksort(快速排序) 是由 东尼·霍尔 所发展的一种排序. 它比其他的Ο(n log n)算法更快, 因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来.当然, ...

  2. 快速排序 JavaScript 实现

    作为算法目录下的第一篇博文,快速排序那是再合适不过了.作为最基本最经典的算法之一,我觉得每个程序员都应该熟悉并且掌握它,而不是只会调用库函数,知其然而不知其所以然. 排序算法有10种左右(或许更多), ...

  3. 快速排序javascript实现

    快速排序基本思想: 以升序为例 数组arr,数组个数n; 1.选取一个待排序的元素.一般选第一个位置作为基准值temp=arr[0]. 2.选取带排序数组的两端元素的位置作为哨兵的位置,左端为哨兵i, ...

  4. JavaScript实现10大算法可视化

    参考博客: https://www.cnblogs.com/Unknw/p/6346681.html#4195503 十大经典算法 一张图概括: 名词解释: n:数据规模 k:“桶”的个数 In-pl ...

  5. JS的十大经典算法排序

    引子 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements JavaScript. 当年,想凭借抱Java大腿火一把而不惜把自己名字给改了的JavaScript(原名LiveScript ...

  6. JS家的排序算法

    由于浏览器的原生支持(无需安装任何插件),用JS来学习数据结构和算法也许比c更加便捷些.因为只需一个浏览器就能啪啪啪的调试了.比如下图我学习归并排序算法时,只看代码感觉怎么都理解不了,但是结合chro ...

  7. js排序算法汇总

    JS家的排序算法   十大经典算法排序总结对比 一张图概括: 主流排序算法概览 名词解释: n: 数据规模k:“桶”的个数In-place: 占用常数内存,不占用额外内存Out-place: 占用额外 ...

  8. JS中常见排序算法详解

    本文将详细介绍在JavaScript中算法的用法,配合动图生动形象的让你以最快的方法学习算法的原理以及在需求场景中的用途. 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements Java ...

  9. js 算法排序总结

    1.冒泡排序JavaScript代码实现: function bubbleSort(arr) { var len = arr.length; for (var i = 0; i < len; i ...

随机推荐

  1. nginx 的安装、启动、停止与重启

    一.nginx 基本介绍 1.Nginx 是单进程单线程模型,也就是启动的工作进程只有一个线程响应客户端请求,而 apache 可以在一个进程内启动多个线程响应客户端请求.所以 nginx 的内存占用 ...

  2. LINUX系统日常使用命令

    一.开关机命令1.shutdown -h now   关闭系统2.init 0   关闭系统3.telinit 0  关闭系统4.shutdown -h hours:minutes      按预定时 ...

  3. layui表格点击排序按钮后,表格绑定事件失效解决方法

    最近项目使用layui较为频繁,遇到了一个麻烦的问题,网上搜索也没有看到同类型的问题,故此记下来. 需求是点击上图右侧表格中某一个单元格,会触发点击事件如下代码: $("table>t ...

  4. myeclise2017安装包及破解文件

    亲测可用! myeclipse2017安装包 链接:https://pan.baidu.com/s/13R1wk7mI9ECjEByanIbHDA 提取码:vaeb myeclipse2017破解包 ...

  5. 2019/4/17 Linux学习

    一.Linux的文件系统 其中/prov./srv./sys 文件为文件系统,技术不过硬不要去修改:二.关于Xshell.Xft1.服务器的端口可有65535个可设置,开的越多安全性越差:2.远程登录 ...

  6. spark on yarn 内存分配

    Spark On YARN内存分配 本文主要了解Spark On YARN部署模式下的内存分配情况,因为没有深入研究Spark的源代码,所以只能根据日志去看相关的源代码,从而了解“为什么会这样,为什么 ...

  7. CHD 5.15 安装 Kylin

    这里主要参考官网安装单机案例,并写入到脚本中.具体请看如下:      1.说明           这里采用的是root用户安装,但是运行时需要改一些配置,不然没有权限      2.安装     ...

  8. jdbc访问pipelinedb

    建立Stream及视图 pipeline.execute("create stream caesar(name text,info json);") #创建stream,字段nam ...

  9. 在Tomcat文件中,点击start.bat启动的是另一个tomcat

    遇到问题:在下载了一个免安装的Tomcat7之后解压,点击startup.bat启动tomcat,却报了异常. 后来在电脑一个文件夹中发现了另一个Tomcat8,是安装版本,并配置了环境变量.其环境变 ...

  10. SQl 执行效率总结

    SQL执行效率总结 1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2 ...