希爾排序:算法
定義一個間隔序列,例如是5,3,1。第一次處理,會處理全部間隔爲5的,下一次會處理間隔爲3的,最後一次處理間隔爲1的元素。也就是相鄰元素執行標準插入排序。shell
在開始最後一次處理時,大部分元素都將在正確的位置,算法就沒必要對不少元素進行交換,這是比插入元素高級的地方。數組
1 function shellSort(){ 2 var N=arr.length; 3 var h=1; 4 while(h<N/3){ 5 h=3*h+1;//設置間隔 6 } 7 while(h>=1){ 8 for(var i=h; i<N; i++){ 9 for(j=i; j>=h && arr[j]<arr[j-h]; j-=h){ 10 swap(arr, j, j-h); 11 } 12 } 13 h=(h-1)/3; 14 } 15 } 16 function swap(array, i, j){//兩個數調換 17 var temp =array[j]; 18 array[j]=array[i]; 19 array[i]=temp; 20 }
快速排序:性能
經過遞歸的方式將數據依次分解成包含較小元素和較大元素的不一樣子序列,不斷重複這個步驟,直到全部數據都是有序的。ui
選一個基準值,小於基準值的放一個數組裏面。大於基準值的放一個數組裏面。spa
1 function quickSort(arr){ 2 3 if(arr.length==0){ 4 return []; 5 } 6 var left=[]; 7 var right=[]; 8 var p=arr[0]; 9 for(var i=1; i<arr.length; i++){ 10 if(arr[i]<p){ 11 left.push(arr[i]); 12 }else{ 13 right.push(arr[i]); 14 } 15 } 16 return quickSort(left).concat(p,quickSort(right)); 17 }
快速排序適合用於大型數據集合,在處理小數據集合反而性能會降低。code