JavaScript实现快速排序

Posted 遥岑.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript实现快速排序相关的知识,希望对你有一定的参考价值。

目录

快速排序

快速排序:快速排序几乎可以说是目前所有排序算法中最快的一种,可以看作是冒泡排序的升级版,它的思想是分而治之

当然,没有任何一种算法是在任意情况下都是最优的,比如希尔排序在某些情况下可能优于快速排序,但是大多数情况下,快速排序还是比较好的选择

基本思想

  1. 在数据集中,选择一个元素作为基准(pivot)
  2. 所有小于基准的元素,都移到基准的左边;所有大于基准的元素,都移到基准的右边
  3. 对基准左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止

枢纽(基准)的选择:快速排序中有一个很重要的步骤是选取枢纽,①是直接选取第一个元素作为枢纽,但是在某些情况下,效率不是特别高;②是使用随机数,但是随机数本身就是一个消耗性能的操作;③是取头中尾的中位数,比如8、12、3的中位数是8;④取中间的数。

图例:

图例实现:

var arr = [6,21,5,9,10,2,16]

var quickSort = function(arr) 
    //递归结束条件
    if (arr.length <= 1)  return arr

    //选取枢纽
    var pivotIndex = Math.floor(arr.length / 2);
    //将枢纽取出
    var pivot = arr.splice(pivotIndex, 1)[0];

    //左右两个数组存放小于和大于枢纽的值
    var left = [];
    var right = [];
    for (var i = 0; i < arr.length; i++)
        if (arr[i] < pivot) 
            left.push(arr[i]);
         else 
            right.push(arr[i]);
        
    

    //递归
    return quickSort(left).concat([pivot], quickSort(right));
;

console.log(quickSort(arr))

输出结果:

以上是关于JavaScript实现快速排序的主要内容,如果未能解决你的问题,请参考以下文章

快速排序

快速排序(javascript版本)

排序算法:图解快速排序算法--附带基于Python和JavaScript的实现

快速排序

JavaScript 快速排序法

快速排序中的partition函数的枢纽元选择,代码细节,以及其标准实现