js歸並排序法


 1 function mergeSort(arr) {
 2   var len = arr.length;
 3   if(len > 1) {
 4     var index = Math.floor(len / 2);
 5     left = arr.slice(0,index); //得到下標從0~index-1的數組
 6     right = arr.slice(index);  //得到下標從index開始到末尾的數組
 7     return merge(mergeSort(left) , mergeSort(right));  里面采用遞歸
 8   }else {
 9     return arr;
10   }
11 }
12 
13 function merge(left , right) {   //該函數與快排類似,但是仔細發現,每次left或者right都是要shift掉第一個元素,表示left或者right是會變化的,最后arr.concat,因為不知道left或者right其中一個哪個剩下元素,所以要將剩下的元素給加上
14   var arr = [];
15   while(left.length && right.length) {
16     if(left[0] < right[0]) {
17       arr.push(left.shift());
18     }else {
19       arr.push(right.shift())
20     }
21   }
22   return arr.concat(left , right);
23 }
24   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM