当前位置:首页 > JavaScript

js实现归并

2026-03-13 22:36:47JavaScript

归并排序原理

归并排序是一种分治算法,通过递归将数组拆分为最小单元(单个元素),再逐步合并有序子数组。核心思想是“分而治之”,时间复杂度为O(n log n),空间复杂度为O(n)。

js实现归并

递归实现

递归法通过不断二分数组直至长度为1,再合并有序子数组:

js实现归并

function mergeSort(arr) {
  if (arr.length <= 1) return arr;

  const mid = Math.floor(arr.length / 2);
  const left = mergeSort(arr.slice(0, mid));
  const right = mergeSort(arr.slice(mid));

  return merge(left, right);
}

function merge(left, right) {
  let result = [];
  let i = 0, j = 0;

  while (i < left.length && j < right.length) {
    if (left[i] < right[j]) {
      result.push(left[i++]);
    } else {
      result.push(right[j++]);
    }
  }

  return result.concat(left.slice(i)).concat(right.slice(j));
}

迭代实现

非递归版本使用循环模拟分治过程,避免调用栈过深:

function mergeSort(arr) {
  let step = 1;
  const n = arr.length;

  while (step < n) {
    let l = 0;
    while (l < n) {
      const m = Math.min(l + step, n);
      const r = Math.min(l + 2 * step, n);
      merge(arr, l, m, r);
      l += 2 * step;
    }
    step *= 2;
  }
  return arr;
}

function merge(arr, start, mid, end) {
  const temp = [...arr];
  let i = start, j = mid, k = start;

  while (i < mid && j < end) {
    arr[k++] = temp[i] <= temp[j] ? temp[i++] : temp[j++];
  }

  while (i < mid) arr[k++] = temp[i++];
}

性能优化点

  • 小数组切换插入排序:当子数组长度较小时(如<15),插入排序更高效
  • 避免重复分配内存:预分配临时数组复用
  • 边界检查优化:提前终止已有序数组的合并

复杂度分析

  • 时间:始终为O(n log n),不受输入数据影响
  • 空间:需要额外O(n)存储空间
  • 稳定性:是稳定排序算法(相等元素不改变相对位置)

使用示例

const arr = [3, 44, 38, 5, 47, 15];
console.log(mergeSort(arr)); // [3, 5, 15, 38, 44, 47]

标签: js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…