JS排序算法之快速排序

快速排序和歸併排序都是採用二分法的排序算法。都是 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);
相關文章
相關標籤/搜索