JS排序算法总结:(五)快速排序

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

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)

posted @ 2018-08-30 14:44  Cassie_茜  阅读(378)  评论(0编辑  收藏  举报