归并排序(JS)

 

复制代码
// 为了方便一些调试场景,具体的外层函数表达式使用的是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++;
    }
  }
};
复制代码

// -- 完善中

posted @   樊顺  阅读(102)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
历史上的今天:
2020-11-29 React项目中推荐两种方式使用 ref
2018-11-29 React中方法的this绑定
点击右上角即可分享
微信分享提示