八大排序算法總結:(五)快速排序
阿新 • • 發佈:2018-08-30
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)
八大排序算法總結:(五)快速排序