其基本思路应该是排成两部分单独记录,确定枢轴,实施枢轴到左侧值我们都小于枢轴值。枢轴向右大于枢轴值。这样子不断递归下去


function quicksort(arr,low,high){
var pivot;
if(low < high){
pivot = partition(arr,low,high);
quicksort(arr,low,pivot-1);
quicksort(arr,pivot+1,high);
}
return arr;
}

这个就是快排的入口函数。出现了partition方法。它的作用就是找出记录中的keyword,也就是枢轴


function partition(arr,low,high){
1. var pivot = arr[low];
2. while(low <= high){
3. while(low <= high && arr[high] >= pivot){
4. high--;
5. }
6. swap(arr,low,high);
7. while(low <= high && arr[low] < pivot){
8. low++;
9. }
10 swap(arr,low,high);
11 }
12 return low;
13 }

事实上它的思想也是挺简单的。比方你有这样一系列数字:5 1 9 3 7 4 8 6 2。我们这里仅仅计算第一趟快排,其它仅仅是递归下去,思路是一致的。

  1. 代码行1把数字列的第一个元素5作为为枢轴,跟最后一个元素2比較;
  2. 一比較不符合代码行3 arr[high] >= pivot。所以就运行交换两个位置的值;
  3. 如今的数字列为2 1 9 3 7 4 8 6 5
  4. 运行代码行7得出2 1都小于枢轴5继续循环,可是到了9时就不满足条件退出了循环。
  5. 运行交换后数字列为2 1 5 3 7 4 8 6 9
  6. 这个时候low为3 high为9 满足代码行2的循环条件继续依照前面步骤1~5运行
  7. 最后第一趟数字列为2 1 4 3 5 7 8 6 9
  8. 枢轴5的左边的值2 1 4 3都比它小。右边的值7 8 6 9都比它大

最后有一个函数就是交换函数的


function swap(arr,low,high){
var temp;
temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
}

这个函数实现起来还是比較简单的

假设不太了解快排方法的人能够去看《大话数据结构》,写得浅显易懂。

还有就是事实上能够用闭包的方法封装partition和swap方法,揭露quicksort接口到该方法向外界

版权声明:本文博客原创文章,博客,未经同意,不得转载。

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

  1. 用JavaScript实现快排

    啥是快排这里就不讲了,主要还是把原来c++学的东西抓紧转化过来 快排运用的是分而治之的思想,确定一个中值,把大的放右边,小的放左边,然后再左右分别对左右的左右(雾)进行处理 需要注意的一点是,这玩意远 ...

  2. javascript实现快排

    <script> var a = [7,4,5,3,2,1,4,5,6,6,2,21,4,53,12,0,-5,31,535,64,11,1,1,1,1]; function swap(a ...

  3. 第一百一十四节,JavaScript文档对象,DOM进阶

    JavaScript文档对象,DOM进阶 学习要点: 1.DOM类型 2.DOM扩展 3.DOM操作内容 DOM自身存在很多类型,在DOM基础课程中大部分都有所接触,比如Element类型:表示的是元 ...

  4. JavaScript(第十九天)【DOM进阶】

    学习要点: 1.DOM类型 2.DOM扩展 3.DOM操作内容 DOM自身存在很多类型,在DOM基础课程中大部分都有所接触,比如Element类型:表示的是元素节点,再比如Text类型:表示的是文本节 ...

  5. JavaScript基础笔记(十四)最佳实践

    最佳实践 一)松散耦合 1.解耦HTML/JavaScript: 1)避免html种使用js 2)避免js种创建html 2.解耦CSS/JS 操作类 3.解耦应用逻辑和事件处理 以下是要牢记的应用和 ...

  6. Ajax异步与JavaScript的一些初浅认识

    向服务器请求数据的技术 有以下五种常用技术用于向服务器请求数据 XMLHttpRequest(XHR) Dynamic script tag insertion(动态脚本标签插入) iframes C ...

  7. ARM指令集的最新版本包括针对JavaScript的优化

    在ARM指令集中,ARMv8.3添加了一个新的float-to-int指令,其错误和超出范围的值按照JavaScript的方式处理.以前[指令]获取JavaScript的语义要慢得多,JavaScri ...

  8. CoffeeScript 更优美的Javascript

    CoffeeScript 是一门编译到 JavaScript 的小巧语言. 在 Java 般笨拙的外表下, JavaScript 其实有着一颗华丽的心脏. CoffeeScript 尝试用简洁的方式展 ...

  9. 《高性能javascript》阅读摘要

    最近在阅读这本Nicholas C.Zakas(javascript高级程序设计作者)写的最佳实践.性能优化类的书.记录下主要知识. 加载和执行 脚本位置 放在<head>中的javasc ...

随机推荐

  1. vs提示“当前不会命中断点,源代码与原始版本不同”的一种解决办法

    将出问题的cpp文件用notepad打开,另存为‘unicode’类型,覆盖源文件即可

  2. 移植FreeModbus+ModbusMaster+STM32至RT-Thread(3、4阶段)

    一.简介及进展 经过一个多月的努力,目前项目开发已进入最后阶段.虽然比预期时间有些延迟,但也收获不少,边工作边开源的效率确实还有待提高. 简单说下目前的进展吧 1.目前项目已经在Github中开源,大 ...

  3. 整合SSH三大框架用注解时报An AnnotationConfiguration instance is required to use

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 's ...

  4. iTextSharp.text的一个使用,主要用来创建PDF

    using iTextSharp.text; //创建一个字体来使用和编码格式 BaseFont baseFont = BaseFont.CreateFont("C:\\Windows\\F ...

  5. BootStrap - 时间组件

    效果: CSS代码: JS代码: 调用:

  6. [Swust OJ 137]--波浪数(hash+波浪数构造)

    题目链接:http://acm.swust.edu.cn/problem/137/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

  7. __autoload函数

    ./index.php----------------------------------------------------------------------------------<?ph ...

  8. (Problem 15)Lattice paths

    Starting in the top left corner of a 22 grid, and only being able to move to the right and down, the ...

  9. mul8_unsigned multipliter

    李亚民老师更注重硬件设计思想的训练.他给出的硬件设计方法更贴近底层硬件,下面看看他的设计思想:                                                      ...

  10. Python基础2:反射、装饰器、JSON,接口

    一.反射 最近接触到python的反射机制,遂记录下来已巩固.但是,笔者也是粗略的使用了__import__, getattr()函数而已.目前,笔者的理解是,反射可以使用户通过自定义输入来导入响应的 ...