javascript实现快速排

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


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接口到该方法向外界

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

时间: 2024-08-01 05:08:24

javascript实现快速排的相关文章

javascript 模块快学习

<script> var Module = (function () { var my = {}; function privateMethod() { } my.moduleProperty = 1; my.moduleMethod = function () { } return my; } ()); //为防止修改内部的变量 console.log(Module.moduleProperty);//1 Module.moduleMethod = 2; console.log(Module

利用 地址引用 进行 快速排树 的简单方法

小强们难免会和树打交道, 一提到树, 小强们都会想到用递归. 不可否认,我也写了很多年的递归. 但是递归需要大量的循环. 这里,利用地址引用进行快速排树,只需要一次循环. 1,从儿子找父亲 这是我构造的测试数据: 1,0;2,0;3,1;4,3;5,4;6,5;7,4;8,3;9,8;10,9 儿子,父亲;儿子,父亲;儿子,父亲;..... 1 var str = "1,0;2,0;3,1;4,3;5,4;6,5;7,4;8,3;9,8;10,9"; 2 var datas = str

javascript实现快排

它的基本思想应该是将待排记录分成独立的两个部分,找出枢轴,实现枢轴左边的值都小于枢轴的值,枢轴右边都大于枢轴的值.这样子不断递归下去 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; } 这个就是快排的入口函数,出现了p

数据结构学习(冒泡、选择、插入、快速排.....

#coding=utf-8 ''' 数据结构排序 ''' #函数冒泡排序 # 参数alist:被排序的列表 def bubbleSort(alist): for num in range(len(alist)-1,0,-1): for i in range(num): if alist[i] < alist[i+1]: #进行当前位置和下一个位置的交换 alist[i] = alist[i]^alist[i+1] alist[i+1] = alist[i]^alist[i+1] alist[i]

不使用数据库,用程序快速排重

static void DistinctTest() { int[] echo = { 1, 1, 2, 3, 4, 5, 5, 6, 6, 7, 8, 9, 8, 10 }; IEnumerable<int> ienumerable = echo.Distinct();//去重,返回IEnumerable int[] newecho = ienumerable.ToArray();//重新转换成数组 foreach (int i in newecho) { Console.WriteLine

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

向服务器请求数据的技术 有以下五种常用技术用于向服务器请求数据 XMLHttpRequest(XHR) Dynamic script tag insertion(动态脚本标签插入) iframes Comet Multipart XHR (多部分的XHR) XHR 优点:能够精细的控制发送请求和数据接收,也就是说你可以在请求的报文中添加任意的头信息和参数(包括Get和Post),并读取从服务器返回的头信息,以及响应文本自身. 缺点:不能使用XHR从当前运行的代码域之外请求数据,而且老版本的IE不

JavaScript基础题库

选择题: 填空题: 问答题: 1.什么是JavaScript?(这是基本题,对很多程序员来说也是送分题!) JavaScript是客户端和服务器端脚本语言,可以插入到HTML页面中,并且是目前较热门的Web开发语言.同时,JavaScript也是面向对象编程语言. 类似的基本题目还包括:JavaScript都有哪些类型?JavaScript是谁发明的?...... 2.列举Java和JavaScript之间的区别? Java是一门十分完整.成熟的编程语言.相比之下,JavaScript是一个可以

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

在ARM指令集中,ARMv8.3添加了一个新的float-to-int指令,其错误和超出范围的值按照JavaScript的方式处理.以前[指令]获取JavaScript的语义要慢得多,JavaScript的数字默认为双倍,因此需要进行大量转换. 当iPhoneXS首次出货时,人们注意到它在JavaScript基准测试中表现得非常不可思议.例如,David Heinemeier Hansson(WEB应用框架):iPhoneXS比Speedometer 2.0 JavaScript基准测试中的iM

搭建Node+NPM+Grunt+Ruby开发环境

序 最近尝试了一下CoffeeScript,和Sass,不得不说这两个搭配起来的确是不错的选择,熟悉以后基本上开发就比较快速了. 当然要开发这个首先需要搭建环境,这里就需要有Node.NPM.Grunt.Ruby. Node与NPM基本上是一套安装,有了Node环境后才能搭建后面的CoffeeScript环境:而Ruby是为了执行Sass编译命令所需要的环境,当然最后还有一个Grunt,这个是为了项目构建的方便,一体化构建,不用自己重复执行编译命令. Ruby Ruby,一种为简单快捷的面向对象