基本原理:
  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. thinkphp5.1 退出登陆操作

    使用Session:: 静态方法即可

  2. oracle EBS SLQ语句

    1.查询公司主体 SELECT a.flex_value_id,b.flex_value,B.SUMMARY_FLAG,A.flex_value_meaning,c.flex_value_set_na ...

  3. lnmp环境一键安装

    lnmp一键安装命令: wget -c http://soft.vpser.net/lnmp/lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz & ...

  4. codeblock 恢复默认字体设置

    默认字体为:Courier New   我使用的codeblock版本为:17 .12. 今天我想调整一下codeblock的代码驱的字体,根据设置:settings->Editor->F ...

  5. MySql:SELECT 语句(五)正则表达式的使用

    关键字:REGEXP REGEXP 语句形式和 LIKE 语句相似,REGEXP 后面跟正则表达式.如果需要区分大小写,可以在 REGEXP 后加关键字 BINARY. 所有的正则表达式的规则都可以在 ...

  6. 查找运行时间超过1天的frmweb进程

    EBS中经常会出现一些zombie的frmweb进程,特征是运行时间很长,占用CPU都(1个frmweb进程占用1个CPU线程100%资源)下面脚本是利用awk找到运行时间超过1天的frmweb进程, ...

  7. 将php脚本加入开机启动

    可以看到“/etc/rc.d/init.d”下有很多的文件,每个文件都是可以看到内容的,其实都是一些shell脚本.系统服务的启动就是通过“/etc/rc.d/init.d”中的脚本文件实现的.我们也 ...

  8. 代码详解:TensorFlow Core带你探索深度神经网络“黑匣子”

    来源商业新知网,原标题:代码详解:TensorFlow Core带你探索深度神经网络“黑匣子” 想学TensorFlow?先从低阶API开始吧~某种程度而言,它能够帮助我们更好地理解Tensorflo ...

  9. JVM入门

    面试过程中,问到JVM一脸懵逼,在github看了一些文章,感觉质量不错,整理了一下希望大家不吝赐教. 目前主流的jdk采用解释与编译混合执行的模式,其JIT技术采用分层编译,极大地提升了Java的执 ...

  10. BurpSuite抓HTTPS包

    Burp Suite要抓HTTPS的包的话,是需要有Burp Suite的CA证书的 为什么要证书这里就不说了,下面是具体步骤 1.首先要把Burp Suite的CA证书下载到本地 Burp Suit ...