美文网首页
JavaScript的排序算法——归并排序

JavaScript的排序算法——归并排序

作者: 流浪的三鮮餡 | 来源:发表于2018-12-05 23:48 被阅读28次

归并排序(Merge Sort)

在计算机科学里,归并排序(Merge Sort)是一种通用有效的排序算法。通常情况下实现的是稳定的排序队列,这意味着相等元素排序后的顺序与排序前保持一致。归并排序是采用分治法(Divide and Conquer)的一个非常典型的应用,由John von Neumann发明于1945年。

归并排序(Merge Sort)

例子

利用归并排序,对有7个整数值的数组进行排序。以下图示模拟归并排序(自上而下)的步骤。


归并排序步骤模拟图

复杂度

算法 最好情况 平均情况 最坏情况 空间复杂度 稳定性
归并排序 O(n log n) O(n log n) O(n log n) O(n) 稳定

ES6实现

function MergeSort(array) {
    let len = array.length;
    if (len <= 1) {
      return array;
    }
    let num = Math.floor(len / 2);
    let left = MergeSort(array.slice(0, num));
    let right = MergeSort(array.slice(num, array.length));
    return merge(left, right);
  
    function merge(left, right) {
      let [l, r] = [0, 0];
      let result = [];
      while (l < left.length && r < right.length) {
        if (left[l] < right[r]) {
          result.push(left[l]);
          l++;
        } else {
          result.push(right[r]);
          r++;
        }
      }
      result = result.concat(left.slice(l, left.length));
      result = result.concat(right.slice(r, right.length));
      return result;
    }
  }

参考

维基百科
百度百科

相关阅读

JavaScript的排序算法——冒泡排序
JavaScript的排序算法——选择排序
JavaScript的排序算法——插入排序
JavaScript的排序算法——归并排序
JavaScript的排序算法——快速排序

相关文章

  • JavaScript实现经典排序算法

    使用JavaScript实现的经典排序算法 util 冒泡 简单选择 直接插入 快速排序 堆排序 归并排序

  • 2018-06-30

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

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

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

  • 排序算法之归并排序

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

  • 归并排序

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

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

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

  • 算法 第二章第二部分笔记

    各种排序算法的性能特点 选择排序 插入排序 希尔排序 归并排序 本地归并排序 自底向上的归并排序 快速排序 三向切...

  • 归并排序

    归并排序(Merge Sort): 归并排序是一个相当“稳定”的算法对于其它排序算法,比如希尔排序,快速排序和堆排...

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 归并排序

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

网友评论

      本文标题:JavaScript的排序算法——归并排序

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