八大排序算法总结:快速排序

Posted cassiehouse

tags:

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

目的:掌握 快速排序 的 基本思想与过程、代码实现、时间复杂度

1、基本思想与过程:(分治思想,挖坑填数)

  (1)从数列中选择一个数作为key值;

  (2)将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边;

  (3)对左右两个小数列重复第二步,直至各区间只有1个数。

  下面对数组【42,20,17,13,28,14,23,15】进行快速排序,模拟两轮排序的结果如下:

技术分享图片

2、代码实现:

function quickSort(a,l,r){
    
    if(l>=r)
        return;

    var i = l; 
    var j = r; 
    var key = a[l];//选择第一个数为key

    console.log(‘quickSort(a,‘+l+‘,‘+r+‘)‘)
    while(i<j){

        while(i<j && a[j]>=key){//从右向左找第一个小于key的值
            j--;
        }
        if(i<j){
            a[i] = a[j];
            i++;
        }

        while(i<j && a[i]<key){//从左向右找第一个大于key的值
            i++;
        }
        if(i<j){
            a[j] = a[i];
            j--;
        }
    }
    //i == j
    a[i] = key;
    quickSort(a, l, i-1);//递归调用
    quickSort(a, i+1, r);//递归调用
    return a;
 }

技术分享图片

 3、时间复杂度:O(N*logN)

以上是关于八大排序算法总结:快速排序的主要内容,如果未能解决你的问题,请参考以下文章

(Java)八大排序算法总结

八大排序算法总结

数据结构学习笔记(八大排序算法)整理与总结

数据结构学习笔记(八大排序算法)整理与总结

数据结构之八大排序算法(C语言实现)

《糊涂算法》之八大排序——快速排序