js排序算法05——快速排序

鲁小肃      2022-02-16     425

关键词:

终于到了传说中的快速排序算法了,快速排序的思想和归并排序一样,都是采用分治思想,不同之处在于归并每次将数组一分为二,最后将小的数组进行比较,合并为大数组。快排是每次找一个主元,也就是基准数,按照这个基准数,把小于基准数的数放左边,大于基准数的数放右边,通过基准数来分组实现排序。所以快排的很重要一步就是选择主元,主元选取的是否合适直接影响到算法的效率。我的方法是每次从子数组中三个数(首、尾、中),取他们的中位数作为主元,分析到此结束,直接上code

function quickSort(arr,left,right){
    if(right-left<=1){
        return arr;
    }
    else{
        var l=left,r=right,m=parseInt((r+l)/2);        
        var pivot,cup;
        if(arr[l]>arr[m]){
            cup = arr[m];
            arr[m] = arr[l];
            arr[l] = cup;
        }
        if(arr[m]>arr[r]){
            cup = arr[m];
            arr[m] = arr[r];
            arr[r] = cup;
        }
        if(arr[l]>arr[m]){
            cup = arr[m];
            arr[m] = arr[l];
            arr[l] = cup;
        }
        pivot = arr[m];
        cup = arr[r-1];
        arr[r-1] = arr[m];
        arr[m] = cup;
        var i=0,j=r-2;
        while(i<j){
            while(arr[i]<pivot){
                i++;
            }
            while(arr[j]>pivot){
                j--;
            }
            if(i<=j){
                cup = arr[i];
                arr[i] = arr[j];
                arr[j] = cup;
                i++;
                j--;
            }
        }
        cup = arr[i];
        arr[i] = arr[r-1];
        arr[r-1] = cup;
        quickSort(arr,l,i-1);
        quickSort(arr,i,r);
        return arr;    
    }
}

哈哈,比较简单粗暴,其实可以把交换位置的部分封装成一个函数的,在此就不赘言了。快排属于非稳定算法,时间平均时间复杂度为O(nlogn);在处理大量随机数的排序时,表现很好的。

js实现两种实用的排序算法——冒泡快速排序

零:数据准备,给定数组arr=[2,5,4,1,7,3,8,6,9,0];一:冒牌排序1思想:冒泡排序思想:每一次对比相邻两个数据的大小,小的排在前面,如果前面的数据比后面的大就交换这两个数的位置    要实现上述规则需要用到两... 查看详情

js实现两种实用的排序算法——冒泡快速排序

...0)零:数据准备,给定数组arr=[2,5,4,1,7,3,8,6,9,0];一:冒牌排序1思想:冒泡排序思想:每一次对比相邻两个数据的大小,小的排在前面,如果前面的数据比后面的大就交换这两个数的位置    要实现上述规则需要用... 查看详情

排序算法05选择排序(代码片段)

接上文:【排序算法】04快速排序 选择排序的思路:共需要进行length-1次选择,每次选择要找到选择范围内最小记录的位置, 将最小记录与选择范围内的第一个记录互换位置。 向工具类ArraySorterUtils中添加选择排序的... 查看详情

05归并排序(代码片段)

快速排序不是一个稳定的算法,在交换过程中可能进入胡同一直在几个数字之间处理。这次将仔细讲解归并排序算法,一个稳定快速的排序算法。归并排序采用分组处理,也是二分法的思想。将一组数据拆成两组࿰... 查看详情

了解快速排序算法如何在 VBA 中重现

】了解快速排序算法如何在VBA中重现【英文标题】:UnderstandinghowaquicksortalgorithmrecursinVBA【发布时间】:2019-05-2103:59:03【问题描述】:我最近阅读了这篇文章:VBAarraysortfunction?,看看我是否可以获得一些代码来在ExcelVBA中实现快速... 查看详情

使用 Game Maker Studio 2 中的快速排序算法对列表进行排序

】使用GameMakerStudio2中的快速排序算法对列表进行排序【英文标题】:SortingalistusingthequicksortalgorithminGameMakerStudio2【发布时间】:2021-12-1513:05:03【问题描述】:我正在使用GameMakerStudio2.3.6使用迭代算法(冒泡排序)按降序对屏幕上... 查看详情

迭代快速排序方法的分区算法问题

】迭代快速排序方法的分区算法问题【英文标题】:Partitioningalgorithmissuewithiterativequicksortmethod【发布时间】:2018-05-1507:35:44【问题描述】:原始问题的简短版本:我正在尝试转换此示例:http://programmertech.com/program/cpp/quick-sort-recur... 查看详情

快速排序实现 - Python

】快速排序实现-Python【英文标题】:QuickSortImplementation-Python【发布时间】:2015-10-2622:05:13【问题描述】:我正在尝试在Python中实现快速排序算法(https://en.wikipedia.org/wiki/Quicksort)。我在C++中成功实现了该算法,但它在Python中给出了... 查看详情

快速排序的算法

 自学java到数组时,学习到了两种排序方法:选择排序和冒泡排序,冒泡排序是选择排序的进阶阶段,精简了运算的过程。了解到,java语言已经提供了排序的方法:通过util.Arrays.sort可以对数组进行自动排序,而排序方法用的... 查看详情

快速排序算法

快速排序算法的思想  快速排序算法本质上通过把一个数组划分成俩个子数组,然后递归的调用自己为每一个子数组进行快速排序来实现的,它应用了划分算法和递归思想,具体的划分算法参考http://www.cnblogs.com/iwebkit/p/7623350.h... 查看详情

算法:快速排序

算法:快速排序(Java版本)什么是快速排序法呢?  快速排序法是十分盛行的,因为它实现简单,效率很高,尤其是对于大量的数据进行排序且在一般应用比其他算法更快速,并且可以在原地排序(仅仅使用一个辅助栈),且将长为... 查看详情

排序算法-快速排序

...绍这些算法以及实现,最后再总结一次。首先,先从快速排序开始。算法思想简单描述:快速排序是对冒泡排序的一种本质改进。它的基本思想是通过一趟扫描后,使得排序序列的长度能大幅度地减少。在冒泡排序中,一次扫描... 查看详情

排序算法——快速排序

四、快速排序(QuickSort)   快速排序是一种使用很广泛的排序算法,属于交换排序类。思路:  使用“分治”的递归算法进行排序步骤:  1)基准情形:N=0或1,无需排序,返回  2)N>1,从数组S中任意取一个元素ν... 查看详情

快速排序算法详解(代码片段)

前言    快速排序相对于插入排序、冒泡排序等排序算法稳定性不高。但快速排序目前来说是基于比较的内部排序中被认为是最好的算法,当N较大且元素为随机分布时,快速排序平均速度最快。在算法竞赛中处理... 查看详情

排序算法之快速排序(代码片段)

     基本概念    快速排序是非常流行、应用非常广泛的排序算法,而且实现简单,适用于各种不同的输入数据,在一般应用中比其他排序算法都要快很多。快速排序是基于分治思想的原地排序的... 查看详情

图形化排序算法比较:快速排序插入排序选择排序冒泡排序

 图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序  查看详情

排序算法--快速排序算法解析

一、快速排序算法思路①、取待排序列表的第一个元素p,通过归位算法,挪移他到列表中正确的位置。②、列表被元素p分成两部分,左边都比元素p小,右边都比元素p大。③、通过递归,在两部分,重复1、2步骤,直至列表有序... 查看详情

js常见排序算法

参考技术A排序算法说明:(1)对于评述算法优劣术语的说明稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;内排序:所有排序操作都在内存中完... 查看详情