(四)前端javascript中的数据结构之归并排序

归并排序是一种分治算法, 其思想是:
将原始数组切分成较小的数组,直到每个小数组只有一
个位置,接着将小数组归并成较大的数组,直到最后只有一个排序完毕的大数组
归并排序是第一个可以被实际使用的排序算法。它比前面的几种排序方法效率要好很多

因为是分治思想,所以要用到递归。

代码实现

js 复制代码
//归并排序的特点
// 1.归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
// 2.归并排序是一种稳定的排序方法。
// 3.归并排序是建立在归并操作上的一种有效的排序算法。归并操作(merge)指的是将两个有序的序列合并成一个有序序列的过程。
// 4.归并排序是一种时间复杂度为O(nlogn)的排序算法。
// 5.归并排序是一种稳定的排序方法。

function mergeSort(arr) {
  return mergeSortRecursion(arr);
}

function mergeSortRecursion(arr, type) {
  //如果数组长度小于等于1,直接返回
  if (arr.length <= 1) return arr;
  //计算中间值
  var mid = Math.floor(arr.length / 2);
  //拆分数组,为左右两部分,并递归
  var leftArr = arr.slice(0, mid);
  console.log("🚀 ~ mergeSortRecursion ~ leftArr:", leftArr);
  var rightArr = arr.slice(mid);
  console.log("🚀 ~ mergeSortRecursion ~ rightArr:", rightArr);
  console.log("🚀 ~ mergeSortRecursion ~ type:", type);
  console.log("aaa");

  return merge(
    mergeSortRecursion(leftArr, "left"),
    mergeSortRecursion(rightArr, "right")
  );
}

function merge(left, right) {
  console.log("🚀 ~ merge ~ right:", right);
  console.log("🚀 ~ merge ~ left:", left);
  let result = [],
    il = 0,
    ir = 0;
  while (il < left.length && ir < right.length) {
    if (left[il] < right[ir]) {
      result.push(left[il++]);
    } else {
      result.push(right[ir++]);
    }
  }
  while (il < left.length) {
    result.push(left[il++]);
  }
  while (ir < right.length) {
    result.push(right[ir++]);
  }
  console.log("🚀 ~ merge ~ result:", result);
  return result;
}

复杂度

  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(n)
  • 稳定排序算法

测试

js 复制代码
    const demo = mergeSortRecursion([1, 5, 3, 4, 2,10,12])
    console.log("🚀 ~ demo:", demo)


一定要借助断点调试,查看执行的流程,不然实在无法理解这个实现过程,大佬就自便了

相关推荐
一米阳光86613 分钟前
软考(中级)软件设计师核心笔记(8)数据结构——树与二叉树
数据结构·笔记·职场发展·软考·软件设计师·中级职称
l1m0_14 分钟前
告别反复修改Prompt:AI生成React应用并落地开发的实战复盘
前端·react.js·ui·ai·设计
依然鸣22 分钟前
PTA团体程序设计天梯赛L2真题讲解L2-005-008
开发语言·数据结构·c++·算法·深度优先·pat考试·图论
xexpertS27 分钟前
前端工程转型实践:从 Ember 迁移到 React,提升构建速度与研发效能
前端·react.js·前端框架
大家的林语冰29 分钟前
👍 JS 还在进化,ES2026 正式推出,最新七大特性补全!
前端·javascript·json
铁皮饭盒33 分钟前
DeepSeek V4 Pro 0813发布了, 也可以部署到 Codex 了
前端·javascript·后端
imaol11 小时前
数据结构--树
数据结构
Tongzhi20261 小时前
通芝科技无感考勤一体机:软硬一体,开箱即用
数据结构·数据库·科技·算法·均值算法·数据库开发
Sterting2 小时前
反馈组件:对话框、消息与通知
前端·javascript·vue.js
breeze jiang2 小时前
ESLint flat config 配置实战:五大字段、规则严重级别与 --fix 能力边界详解
开发语言·前端·javascript