快速排序和歸併排序都是採用二分法的排序算法。都是 Olog N算法
不過快速排序更復雜一些。數組
快遞排序跟歸併排序的區別是順序,它是先總後分。ui
不斷地從斷點分,讓左邊的數都小於斷點,右邊都大於斷點。而後迭代切分。spa
1 var group= [1,9,3,5,0,4,2,8]; 2 3 function swap (k,y,arr) { 4 var aux = arr[k]; 5 arr[k] = arr[y]; 6 arr[y]=aux; 7 8 }; 9 10 function quickSort(list) { 11 12 return quick(list,0,list.length-1); 13 14 } 15 16 function quick(array,left,right) {//主方法用來遞歸 和傳遞數組 17 if (array.length >1){ 18 var index = shear(array,left,right); 19 20 if(left<index-1){//返回位置的前面還有未排序的 21 quick(array,left,index-1); 22 } 23 if(right>index){//後面還有未排序的,遞歸 24 quick(array,index,right); 25 } 26 27 } 28 return array; 29 }; 30 function shear(array,left,right) { 31 var pivot = array[Math.floor((left+right)/2)]; 32 var nl = left; 33 var nr = right; 34 while(nl<=nr){ 35 while( array[nl] < pivot){ //找左邊的比pivot更大的值 36 nl++; 37 } 38 while( array[nr] > pivot ){ //找右邊的比pivot更小的值 39 nr--; 40 } 41 if(nl <= nr){//若是找到的兩個數是左右的順序,那麼交換 42 swap(nl,nr,array); 43 nl++; 44 nr--; 45 } 46 47 } 48 return nl;//返回用來建立子數組的位置。該位置的左側都是小於pivot的值,該位置及其右側都是大於等於pivot的。 49 50 } 51 quickSort(group);