当前位置:首页 > JavaScript

js实现并轨排序

2026-03-16 03:36:10JavaScript

js实现并轨排序

并轨排序(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);
      merge(arr, left, mid, right);
      left = left + 2 * step;
    }
    step *= 2;
  }
  return arr;
}

function merge(arr, left, mid, right) {
  const temp = arr.slice(left, mid);
  let i = 0, j = mid, k = left;

  while (i < temp.length && j < right) {
    arr[k++] = temp[i] <= arr[j] ? temp[i++] : arr[j++];
  }

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

算法分析

时间复杂度始终为O(n log n),空间复杂度为O(n)。是稳定排序算法,适合大数据量排序。递归实现代码更简洁,但迭代实现避免了递归调用栈的开销。

使用示例

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

标签: js
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 的基本实现方法 在 JavaScript 中实现 Vue.js 的功能,可以通过直接引入 Vue 库或使用现代构建工具(如 Vite 或 Webpack)。以下是几种常见的实现方式:…

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…