我的网站开发技术经验总结 我的网站开发技术经验总结
首页

fangdown

我的网站开发技术经验总结
首页
  • 大前端

  • 基础

  • 框架

  • 情商

  • 算法

    • 说说对二分查找的理解
    • 说说对动态规划、分而治之的理解
    • 说说对图的理解
    • 说说对堆的理解
    • 说说对归并排序的理解
      • 是什么
      • 怎么用
        • 分
        • 合
        • 时间复杂度nlogn, 稳定
      • 场景
    • 说说对快速排序的理解
    • 说说对插入排序的理解
    • 说说对数据结构的理解
    • 说说对栈、队列的理解及应用
    • 说说对树(二叉树)的理解
    • 说说对算法的理解及应用场景
    • 说说对贪心算法,回溯算法的理解
    • 说说对选择排序的理解
    • 说说有哪些排序算法及理解
    • 说说算法复杂度有哪些?
    • 说说对冒泡排序的理解
  • 网络

  • 千锤百炼
  • 算法
fangdown
2021-10-20
目录

说说对归并排序的理解

# 是什么

归并排序: 分和合的排序算法

# 怎么用

# 分

把数组分成2半,在递归分,直到一个单独数字

# 合

把两个数合并成一个有序数组

function mergeSort(arr) {
  const len = arr.length;
  if (len < 2) return arr;
  let middle = Math.floor(len / 2);
  let left = arr.slice(0, middle);
  let right = arr.slice(middle);
  return merge(mergeSort(left), mergeSort(right));
}
function merge(left, right) {
  const result = [];
  while (left.length && right.length) {
    if (left[0] < right[0]) {
      result.push(left.shift());
    } else {
      result.push(right.shift());
    }
  }
  while (left.length) {
    result.push(left.shift());
  }
  while (right.length) {
    result.push(right.shift());
  }
  return result;
}

const arr = [1, 19, 2, 5, 99, 23];
const res = mergeSort(arr);
console.log(res);

# 时间复杂度nlogn, 稳定

# 场景

例如,使用100m内存对900m的数据进行排序,过程如下:

读入100m数据内存,用常规方式排序

将排序后的数据写入磁盘

重复前两个步骤,得到9个100m的临时文件

将100m的内存划分为10份,将9份为输入缓冲区,第10份为输出缓冲区

进行九路归并排序,将结果输出到缓冲区

若输出缓冲区满,将数据写到目标文件,清空缓冲区

若缓冲区空,读入相应文件的下一份数据

#算法
上次更新: 2021/12/19, 18:05:42
说说对堆的理解
说说对快速排序的理解

← 说说对堆的理解 说说对快速排序的理解→

最近更新
01
多分支修复撞车的问题
05-01
02
如何成为架构师
01-23
03
服务器部署全过程
11-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 fangdown | 粤ICP备19079809号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式