当前位置:首页 > JavaScript

js实现归并

2026-04-05 16:49:42JavaScript

归并排序实现

归并排序是一种基于分治思想的稳定排序算法,时间复杂度为O(n log n)。以下是JavaScript的实现方式:

js实现归并

递归实现

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]);
      i++;
    } else {
      result.push(right[j]);
      j++;
    }
  }

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

迭代实现

function mergeSort(arr) {
  let step = 1;
  while (step < arr.length) {
    let left = 0;
    while (left + step < arr.length) {
      const right = left + step;
      const end = Math.min(left + 2 * step, arr.length);
      merge(arr, left, right, end);
      left = end;
    }
    step *= 2;
  }
  return arr;
}

function merge(arr, left, right, end) {
  const temp = [];
  let i = left, j = right;

  while (i < right && j < end) {
    temp.push(arr[i] < arr[j] ? arr[i++] : arr[j++]);
  }

  while (i < right) temp.push(arr[i++]);
  while (j < end) temp.push(arr[j++]);

  for (let k = 0; k < temp.length; k++) {
    arr[left + k] = temp[k];
  }
}

使用示例

const array = [5, 3, 8, 4, 2, 7, 1, 10];
console.log(mergeSort(array)); // [1, 2, 3, 4, 5, 7, 8, 10]

性能优化

对于大型数组,可以添加一些优化措施:

  • 当子数组长度小于某个阈值时,改用插入排序
  • 检查数组是否已经有序,避免不必要的合并操作
  • 使用临时数组避免频繁的内存分配

归并排序特别适合处理链表排序和大规模数据的外部排序场景。

标签: js
分享给朋友:

相关文章

js实现轮播

js实现轮播

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

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…