快速排序——JavaScript实现
基本原理:
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实现的更多相关文章
- 快速排序 javascript实现
Quicksort(快速排序) 是由 东尼·霍尔 所发展的一种排序. 它比其他的Ο(n log n)算法更快, 因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来.当然, ...
- 快速排序 JavaScript 实现
作为算法目录下的第一篇博文,快速排序那是再合适不过了.作为最基本最经典的算法之一,我觉得每个程序员都应该熟悉并且掌握它,而不是只会调用库函数,知其然而不知其所以然. 排序算法有10种左右(或许更多), ...
- 快速排序javascript实现
快速排序基本思想: 以升序为例 数组arr,数组个数n; 1.选取一个待排序的元素.一般选第一个位置作为基准值temp=arr[0]. 2.选取带排序数组的两端元素的位置作为哨兵的位置,左端为哨兵i, ...
- JavaScript实现10大算法可视化
参考博客: https://www.cnblogs.com/Unknw/p/6346681.html#4195503 十大经典算法 一张图概括: 名词解释: n:数据规模 k:“桶”的个数 In-pl ...
- JS的十大经典算法排序
引子 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements JavaScript. 当年,想凭借抱Java大腿火一把而不惜把自己名字给改了的JavaScript(原名LiveScript ...
- JS家的排序算法
由于浏览器的原生支持(无需安装任何插件),用JS来学习数据结构和算法也许比c更加便捷些.因为只需一个浏览器就能啪啪啪的调试了.比如下图我学习归并排序算法时,只看代码感觉怎么都理解不了,但是结合chro ...
- js排序算法汇总
JS家的排序算法 十大经典算法排序总结对比 一张图概括: 主流排序算法概览 名词解释: n: 数据规模k:“桶”的个数In-place: 占用常数内存,不占用额外内存Out-place: 占用额外 ...
- JS中常见排序算法详解
本文将详细介绍在JavaScript中算法的用法,配合动图生动形象的让你以最快的方法学习算法的原理以及在需求场景中的用途. 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements Java ...
- js 算法排序总结
1.冒泡排序JavaScript代码实现: function bubbleSort(arr) { var len = arr.length; for (var i = 0; i < len; i ...
随机推荐
- leetcode top 100 题目汇总
首先表达我对leetcode网站的感谢,与高校的OJ系统相比,leetcode上面的题目更贴近工作的需要,而且支持的语言广泛.对于一些比较困难的题目,可以从讨论区中学习别人的思路,这一点很方便. 经过 ...
- nodejs 实现文件拷贝
通过4中不通的方式实现对一个文件的拷贝 方式一:readFile 异步一次性读取文件再写入 //异步形式读取文件 function copyFile(url){ const extName = pat ...
- 基于C/S 结构的IM即时通讯软件--上篇
目的:实现类似QQ群聊的聊天室,可以看到好友列表及互相传送信息. 分析:可基于C/S结构实现即时通讯 1.创建基于对话框的MFC程序(支持windows套接字),并增加相应的类与结构体,完善对话框界面 ...
- Linux 下安装 apache
1.检查是否已经安装过 apache (linux 中 apache 的名字是 httpd) rpm -qa httpd 2.如果没有安装过,运行如下命令 yum install httpd -y ...
- python学习Day8 三种字符类型、文件操作
复习 类型转换 1.数字类型:int() | bool() | float() 2.str与int:int('10') | int('-10') | int('0') | float('-.5') | ...
- windows操作系统python selenium webdriver安装
这几天想搞一个爬虫,就来学习一下selenium,在网上遇见各种坑,特写一篇博文分享一下selenium webdriver的安装过程. 一.安装selenium包 pip install selen ...
- 微信小程序:request合法域名检验出错,https://apis.map.qq.com 不在以下 request 合法域名列表中
设置域名 登录微信小程序后台, 设置→开发设置→服务器设置 必须设置域名,微信小程序才能进行网络通讯,不然会报错 如果没有设置合法域名,在开发阶段是可以不设置合法域名的 详情 -项目设置 好了,完美解 ...
- Java框架spring Boot学习笔记(四):Spring Boot操作MySQL数据库
在pom.xml添加一下代码,添加操作MySQL的依赖jar包. <dependency> <groupId>org.springframework.boot</grou ...
- C# 自制报表组件 EzReportBuild 2.5
就写到这里,不玩这个了,game over. 2.0版本添加了多报表页嵌套功能,每份报表可设置多页,每页可设置不同的纸张大小.数据表.页面规则等,并可对报表页次序即时调整,同时,优化了显示,报表显示更 ...
- 在进行商业运算时解决BigDecimal的精度丢失问题
System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.o ...