美文网首页数据结构和算法
每日一算法:归并排序

每日一算法:归并排序

作者: lio_zero | 来源:发表于2021-05-13 16:20 被阅读0次

归并排序(Merge sort)是最流行的排序算法之一。该算法是采用分治法的一个非常文章
典型的应用。

作为一种典型的分而治之思想的算法应用,归并排序的实现有两种方法:

  • 自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法);
  • 自下而上的迭代;

归并只做两件事

  • 把它的输入分成几个小节,直到每个小节只剩下一个元素。
  • 将其所有子部分合并(并排序)为一个现在已排序的大部分。

JavaScript 实现

使用归并排序算法对数字数组进行排序。

  • 使用递归。
  • 如果 length 数组的小于 2,则返回数组。
  • 使用 Math.floor() 计算数组的中间点。
  • 使用 Array.prototype.slice() 将数组切成两部分,然后递归调用 mergeSort() 所创建的子数组。
  • 最后,使用 Array.from()Array.prototype.shift() 将两个排序的子数组组合为一个。
const mergeSort = arr => {
  if (arr.length < 2) return arr
  const mid = Math.floor(arr.length / 2)
  const l = mergeSort(arr.slice(0, mid))
  const r = mergeSort(arr.slice(mid, arr.length))
  return Array.from({ length: l.length + r.length }, () => {
    if (!l.length) return r.shift()
    else if (!r.length) return l.shift()
    else return l[0] > r[0] ? r.shift() : l.shift()
  })
}

mergeSort([5, 1, 4, 2, 3]) // [1, 2, 3, 4, 5]

此示例来自 30 seconds of code 的 mergeSort

相关文章

  • 2018-06-30

    排序算法之归并排序 归并排序算法是排序算法中的经典算法之一,其核心思想是利用归并的思想实现的排序方法,该算法采用经...

  • java实现快速排序、归并排序、希尔排序、基数排序算法...

    快速排序算法 归并排序算法 希尔排序算法 基数排序算法

  • 排序算法之归并排序

    归并排序(Merge Sort) 归并排序是利用归并的思想实现排序的方式,该算法采用的是经典的分治算法 归并排序过...

  • 归并排序

    归并排序 这个排序算法是建立在归并操作上的一种有效的排序算法,算法主要采用分治法,归并排序的算法复杂度为O(n*l...

  • 归并算法

    归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。归并算法的中心是归并两...

  • 算法入门——归并排序、希尔排序

    上篇文章我们学习了算法入门——堆排序,这篇文章我们学习算法入门——归并排序、希尔排序。 归并排序 归并排序是将一个...

  • iOS - 归并排序

    Demo_github 归并排序: 归并排序(Merge Sort)是建立在归并操作上的一种有效的排序算法,算法主...

  • 归并排序

    图解排序算法(四)之归并排序 基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用...

  • 归并排序

    归并排序 归并排序(Mergesort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分...

  • 数据结构--归并排序

    归并排序 (Merge Sort) 归并排序,是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divid...

网友评论

    本文标题:每日一算法:归并排序

    本文链接:https://www.haomeiwen.com/subject/ddjddltx.html