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