当前位置:首页 > JavaScript

js实现并轨排序

2026-02-03 02:55:57JavaScript

并轨排序(Merge Sort)实现

并轨排序是一种分治算法,通过递归将数组分成两半,分别排序后再合并。以下是JavaScript的实现方法:

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;
  let 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 mergeSortIterative(arr) {
  let step = 1;
  const n = arr.length;

  while (step < n) {
    let left = 0;
    while (left < n - step) {
      const mid = left + step;
      const right = Math.min(left + 2 * step, n);
      mergeInPlace(arr, left, mid, right);
      left = left + 2 * step;
    }
    step *= 2;
  }
  return arr;
}

function mergeInPlace(arr, start, mid, end) {
  const left = arr.slice(start, mid);
  const right = arr.slice(mid, end);
  let i = 0;
  let j = 0;
  let k = start;

  while (i < left.length && j < right.length) {
    if (left[i] <= right[j]) {
      arr[k] = left[i];
      i++;
    } else {
      arr[k] = right[j];
      j++;
    }
    k++;
  }

  while (i < left.length) {
    arr[k] = left[i];
    i++;
    k++;
  }

  while (j < right.length) {
    arr[k] = right[j];
    j++;
    k++;
  }
}

性能特点

  • 时间复杂度:O(n log n) 在所有情况下
  • 空间复杂度:O(n) 需要额外空间存储临时数组
  • 稳定排序:相等元素的相对位置不会改变

使用示例

const array = [5, 3, 8, 4, 2, 7, 1, 10];
console.log(mergeSort(array)); // [1, 2, 3, 4, 5, 7, 8, 10]
console.log(mergeSortIterative(array.slice())); // 同样结果

优化建议

对于小规模数组(通常n<15),可以切换到插入排序以提高性能。合并过程可以使用双指针技术减少内存分配。

js实现并轨排序

标签: js
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="sli…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化…