1. 程式人生 > >八大排序算法總結:(五)快速排序

八大排序算法總結:(五)快速排序

con 遞歸調用 結果 width 算法總結 調用 小數 排序算法總結 png

目的:掌握 快速排序 基本思想與過程、代碼實現、時間復雜度

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)

八大排序算法總結:(五)快速排序