javascript之快速排序
快速排序思想其实还是挺简单的,分三步走:
1、在数组中找到基准点,其他数与之比较。
2、建立两个数组,小于基准点的数存储在左边数组,大于基准点的数存储在右边数组。
3、拼接数组,然后左边数组与右边数组继续执行1、2两个步骤,直到最后完成数组排序。
这里直接上代码:
function quickSort(arr){
if(arr.length<=1){
return arr // 如果数组长度小于或等于1,则直接返回数组
}
var num = Math.floor(arr.length/2); // 找到数组中间的索引,如果是浮点数,则向下取整
var centerVal = arr.splice(num,1); // 找到数组中间索引的值
var left = [];
var right = [];
for(var i=0;i<arr.length;i++){
if(arr[i]<centerVal){
left.push(arr[i]) // 基准点左边的数放到左边数组
}else{
right.push(arr[i]) // 基准点右边的数放到右边数组
}
}
// 利用concat拼接数组,并调用quickSort方法
return quickSort(left).concat([centerVal],quickSort(right))
}
alert(quickSort([12,4654,389798,313,453,15,16,43]))
分析:实现快速排序的几个要点:
1、找到比较的基准点;
2、建立两个空数组,用来分别存放与基准点相比较的数。
3、将数组中的数分别与基准点相比较,小于基准点的数存放在左边数组,否则存放在右边数组。
4、将左边数组、基准点、右边数组拼接起来,拼接的同时,左、右两个数组分别执行前3个步骤,直到完成数组的最终排序。
javascript之快速排序的更多相关文章
- 排序算法:图解快速排序算法--不超过18行代码Python和JavaScript实现快速排序算法
快速排序有三大要素 分别是 第一:找基准值--key 第二:分区 第三:比较数字大小 先来看下快速排序流程: 基准值key选取了第一个元素78 基准值是可以任意一个元素 因为选择了最左边的数据,那么就 ...
- javascript的快速排序法
在排序方式中,快速是比较普遍使用的,因为其速度快. 因为其是不断的递归,而且是根据基准点的左右两边开始递归,直到数组只有一个值的时候才返回. 这个基准点是自己定的. 一般取中间,比较好理解. < ...
- javascript版快速排序和冒泡排序
var sort = (function () { //快速排序 var quickSort = { partition: function (array, low, high) { if (low ...
- 用javascript比较快速排序和合并排序的优劣
<script> //用来调用排列方法的类 function arr_sort(arr){ var startTime,endTime; var priv_arr = new Array; ...
- javascript实现快速排序和二分法查找
1.快速排序: 思路:找到数组中间的元素,把它单拎出来,然后从0开始判断数组中的元素比该基准元素大还是小,小的存左边,大的存右边,然后如此反复递归,得出结果. function quickSort(a ...
- 命令式语言和声明式语言对比——JavaScript实现快速排序为例
什么是命令式编程 (Imperative Programming)? 命令机器如何做事情,强调细节实现 java.c.c++等都属此类. “这些语言的特征在于,写出的代码除了表现出“什么(What)” ...
- JavaScript实现快速排序(Quicksort)
目前,最常见的排序算法大概有七八种,其中"快速排序"(Quicksort)使用得最广泛,速度也较快.它是图灵奖得主 东尼·霍尔(C. A. R. Hoare)于1960时提出来的. ...
- javascript实现快速排序算法
忘记了快速排序的思路是怎样的了,复习一下,写了两个实例,发表博文备忘. 对于快速排序的思想,可以参考白话经典算法系列之六 快速排序 快速搞定,讲得比较通俗 prototype扩展的方式 /** * 对 ...
- JavaScript实现快速排序
思想: 通过分治思想.递归方法将数据依次分解为包含较小元素和较大元素的不同子序列 1.在数组中选择一个元素为基准 2.对数组进行遍历,小于基准的元素都移到基准的左边,大于基准的元素都移到基准的右边 3 ...
随机推荐
- JSAAS 平台实现 微信类似的TOKEN机制
在企业微信中,我们在调用微信接口时,我们需要首先获取token,然后根据token,调用API接口方法.这个token是有生命周期的,微信的token默认的生命周期是7200秒. 因此这个token可 ...
- js 上传文件
<input id="file_Up" name="file_Up" type="file" onchange="getFi ...
- UVa 11762 Race to 1 (数学期望 + 记忆化搜索)
题意:给定一个整数 n ,然后你要把它变成 1,变换操作就是随机从小于等于 n 的素数中选一个p,如果这个数是 n 的约数,那么就可以变成 n/p,否则还是本身,问你把它变成 1 的数学期望是多少. ...
- 安卓修改开机logo
这里我们是在ubuntu下进行操作我是用root用户登陆的,首先安装netpbm库 执行:apt-get install netpbm 对于Android系统最开始表现logo是在内核当中,所以首先我 ...
- javase jdk 环境变量 涵义
jdk环境变量配置:path:jdk安装所在目录下的bin路径-->因为环境变量path下放置的是操作系统执行的.exe文件,jdk中bin中放的是可执行的.exe文件,所以要把这个路径放置到p ...
- 关于TM影像各波段组合的简介
321:真彩色合成,即3.2.1波段分别赋予红.绿.蓝色,则获得自然彩色合成图像,图像的色彩与原地区或景物的实际色彩一致,适合于非遥感应用专业人员使用. 432:标准假彩色合成,即4.3.2波段分别赋 ...
- C++编译器详解(二)常见precompiling 指令介绍
VC++编译器中一些常见precompiling 指令介绍 我们在利用vc6.0 project wizard生成的代码中,经常看到大量的precompiling指令.本文讲解了常见的这些指令的作用 ...
- Ng第十三课:聚类(Clustering)
13.1 无监督学习:简介 13.2 K-均值算法 13.3 优化目标 13.4 随机初始化 13.5 选择聚类数 13.1 无监督学习:简介 在这个视频中,将开始介绍聚类算法.这将是一个激 ...
- Alpha阶段敏捷冲刺(五)
1.站立式会议 提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 祁泽文:实现了个人遗忘曲线图 徐璐琳:完成了微信Web ...
- 1、从C语言到C++
1.面向对象的C++ c++是在C语言的基础上发展起来的一门语言,C++是即支持结构化程序编程又支持面向对象程序设计的混合型语言.他一方面提供了对C的兼容性,保持了C的简介.高效,接近汇编语言的特点, ...