// 为了方便一些调试场景,具体的外层函数表达式使用的是var声明语句 var merge_sort = function(arr) { sort(arr, 0, arr.length - 1); }; var sort = function(a, l, r) { // 终止排序过程 if (l >= r) return; // 递归拆分(1分2) const m = ((r - l) >> 1) + l; sort(a, l, m); sort(a, m + 1, r); // 合并子数组(2合1) if (a[m] > a[m + 1]) merge(a, l, m, r); }; var merge = function(a, l, m, r) { const tmp = a.slice(l, r + 1); let i = l; let j = m + 1; for (let k = l; k <= r; k++) { if (i > m) { a[k] = tmp[j - l]; j++; } else if (j > r) { a[k] = tmp[i - l]; i++; } else if (tmp[i - l] <= tmp[j - l]){ a[k] = tmp[i - l]; i++; } else{ a[k] = tmp[j - l]; j++; } } };
// -- 完善中