快速排序算法史上最经典实现

Posted 我想月薪过万

tags:

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

快速排序算法经典介绍

快速排序算法实现原理图解

第一步:

第二步: 取出基准值

第三步: 先右指针往左遍历,遇到比基准值44小的就填补到左指针指向的位置

第四步:左指针向右遍历,遇到比基准值大的就放到右指针指向的位置

第五步:重复第三步和第四步,直到左右指针指向同一个位置,然后将基准值放入该位置

第六步:第五步之后很明显得到了左右序列,下面只需要对左右序列递归即可。

快速排序代码实现

var arry = [44, 3, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]

function quickSort(arr, left, right) 

    //递归结束的条件
    if ((right - left + 1) < 2) return
    // 实现快速排序算法核心步骤 
    // 选取基准值,在这里我选择数组最左边的值为
    var middleVal = arr[left]
    // 初始化左右指针
    var l = left
    var r = right
    //循环移动左右指针,并切换至
    while (l < r) 
        //从右边开始寻找比基准值小的数
        while ((arr[r] > middleVal) && (l < r)) 
            r--
        

        //如果在右边找到了比中间值小的数,便填入左边的坑,这个是有条件的,你不能越过左指针
        if (l < r) 
            arr[l++] = arr[r]
        

        //从左边开始寻找比基准值大的数
        while ((arr[l] > middleVal) && (l < r)) 
            l++
        

        //如果在左边找到了比中间值大的数,便填入右边的坑,这个是有条件的,你不能越过右指针
        if (l < r) 
            arr[r--] = arr[l]
        
    

    //左右指针移动到一起之后插入中间值
    arr[l] = middleVal

    //递归左右序列
    quickSort(arr, left, l - 1)
    quickSort(arr, l + 1, right)


//调用自己实现的快速排序算法
quickSort(arry, 0, arry.length - 1)
console.log(arry)

 运行结果

 

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

史上最易理解的快速排序原理详解以及Arrays.sort方法

插入排序史上最经典的实现方式

冒泡排序史上最经典的实现

经典排序算法--快速排序

史上最清晰的三路快速排序

算法学习——递归之快速排序