快速排序基本思想:

以升序为例

数组arr,数组个数n;

1、选取一个待排序的元素。一般选第一个位置作为基准值temp=arr[0]。

2、选取带排序数组的两端元素的位置作为哨兵的位置,左端为哨兵i,右端为哨兵j,

3、先用哨兵j所在位置的值与基准值比较,如比基准值大则左移,再用哨兵i所在位置的值与基准值比较,比基准值小则右移。

4、哨兵i,j位置已确定但是i还是在j的左边,则交换值arr[i]和arr[j]。

5、否则,i,j相遇,则基准值位置确定。交换arr[i]和基准值temp。这时基准值temp左边的值都比temp小,右边的值都比temp大。

6、分别递归快拍temp的左边和右边的数组。

js实现:

 var arr = [5,8,7,3,2,4,9,1,10,6];
var n = 9; function quicksort(left, right) {
var i,j,t,temp;
if(left > right)
return;
i = left;
j = right;
temp = arr[left];
//两个哨兵不相遇
while (i != j){
//对于右哨兵找到一个比标准值temp小的停下
while(arr[j] >= temp && i<j){
j--;
}
//对于左哨兵找到一个比标准值temp大的停下
while(arr[i] <= temp && i<j){
i++;
}
//如果左右哨兵没有相遇,则交换第i和第j个元素的位置
if(i < j){
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
//左右哨兵相遇,将最终基数归位
arr[left] = arr[i];
arr[i] = temp;
//继续递归左边的处理
quicksort(left, i-1);
//继续递归处理右边的数组
quicksort(i+1, right);
} quicksort(0,n);

可以将代码复制到浏览器的console.log()里验证一下。

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

  1. 快速排序 javascript实现

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

  2. 快速排序 JavaScript 实现

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

  3. 快速排序——JavaScript实现

    基本原理: 1.从一个数组中任意挑选一个元素作为中轴元素: 2.将剩下的元素以中轴元素作为比较的标准,将小于等于中轴元素的放到中轴元素的左边,将大于中轴元素的放到中轴元素的右边: 3.以当前中轴元素的 ...

  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. Effective Java 第三版——52. 明智而审慎地使用重载

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  2. Nginx 目录结构

    Nginx 目录结构 Nginx 安装后整体的目录结构及文件功能如下: [root@localhost ~]# tree /usr/local/nginx /usr/local/nginx ├── c ...

  3. 6.翻译系列:EF 6 Code-First中数据库初始化策略(EF 6 Code-First系列)

    原文链接:http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-firs ...

  4. Win10 设置窗口背景色

    Win10 的窗口背景色不能像Win7那样通过修改Windows的"窗口"配置来生效,只能是通过修改注册表的信息来修改Win10的窗口色. 1. 通过注册表来修改默认的窗口背景色( ...

  5. Atitit 视图参数解决方案 oracle版和mysql版本 attilax总结.docx

    Atitit 视图参数解决方案 oracle版和mysql版本 attilax总结.docx 1.1. Package机制1 1.2. 全局变量机制1 1.3. 临时表模式,oracle mysql都 ...

  6. [svc]tomcat配置文件详解-最简单的基于mvn的war包

    tomcat安全管理规范 java&tomcat配置参考(多看看这位大牛的博客,写的很好) Tomcat系列之Java技术详解 http://blog.51cto.com/freeloda/1 ...

  7. java 汉诺塔实现自动演示

    1.增加计时功能,显示用户完成移动盘子所花费的时间 2.用户可以设置最大和最小盘子的大小 3.用户可以选择播放和暂停背景音乐 4.用户可以设置盘子的数目 5.用户可以设置盘子的颜色以及背景的颜色 6. ...

  8. Office 2007 打开时总是出现配置进度框

    解决办法: cmd 打开控制台 输入命令:reg add HKCU\Software\Microsoft\Office\12.0\Word\Options /v NoReReg /t REG_DWOR ...

  9. Spring Java-based容器配置

    多年以来,Spring大量的XML配置及复杂的依赖管理饱受非议. 为了实现免XML的开发体验.Spring加入了新的配置注解以支持Java Config开发模式,当中最重要的注解就是@Configur ...

  10. mybatis通用mapper源码解析(二)

    1.javabean的属性值生成sql /** * 获取所有查询列,如id,name,code... * * @param entityClass * @return */ public static ...