使用JavaScript 實現歸併排序
阿新 • • 發佈:2021-02-19
const Compare = { LESS_THAN: -1, BIGGER_THAN: 1, EQUALS: 0 }; //比較函式 function defaultCompare(a, b) { if (a === b) { return Compare.EQUALS; } return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN; } //左右陣列排序演算法 function merge(left, right, compareFn=defaultCompare()) { let i = 0;//左指標 let j = 0;//右指標 const result = [];//用於比較後存放結果 while (i < left.length && j < right.length) { //錯放比較後的資料 result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]); } //拼接result和左陣列或者右陣列剩下的一部分。 return result.concat(i < left.length ? left.slice(i) : right.slice(j)); } //分割陣列演算法 function mergeSort(array, compareFn = defaultCompare) { if (array.length > 1) { const { length } = array; const middle = Math.floor(length / 2);//等分陣列,Math.floor(),向下取整 //這裡使用遞迴呼叫自身 const left = mergeSort(array.slice(0, middle), compareFn);//左陣列 const right = mergeSort(array.slice(middle, length), compareFn);//右陣列 //整合陣列 array = merge(left, right, compareFn); } return array; }
//測試
const arr = [3,5,9,8,7,10,6,1];
console.log(mergeSort(arr));