美文网首页
归并排序时间复杂度

归并排序时间复杂度

作者: 高思阳 | 来源:发表于2018-10-18 11:33 被阅读1次

画个图:

          n
       /    \
     n/2     n/2
    /  \      /  \
  n/4   n/4   n/4   n/4
  / \   / \   / \   / \
 n/8 n/8 n/8 n/8 n/8 n/8 n/8 n/8

树高logn,每层加起来都是n,一共是logn×n
上面是n为2的幂时的特殊情况.对于一般情况,同样可证.

这里需要用一些数学公式:

  1. 设数组的长度为N,用 T(N) 表示排序一个长度为N的数组所需要的比较次数,可想而知,T(0) 和 T(1) 为0
  2. 将数组的两边分别排序各需要 N/2 次比较(上限),归并所需次数为N(上限)
  3. 所以 T(N) ≤ T(N/2) + T(N/2) + N
  4. 设 N = 2n且不等式的等号成立:T(2n) = 2T(2n-1) + 2n(N / 2 = 2n - 1)
  5. 等式两边同时除以2n,得到:T(2n) / 2n = T(2n-1) / 2n - 1 + 1
  6. 由上式可以得到:T(2n - 1) / 2n - 1 = T(2n-2) / 2n - 2 + 1
  7. 将 6 的结果代入 5 中,得到:T(2n) / 2n = T(2n-2) / 2n - 2 + 1 + 1
  8. 重复第7步,直到得到如下结果:T(2n) / 2n = T(20)/20 + n(共计 n - 1 步)
  9. 等式两边同时乘以 2n ,得到结果:T(N) = 2n T(20) + n 2n = NlogN( n = logN)
    所以,算法复杂度为O(nlogn)

相关文章

  • php-归并排序、快速排序、堆排序

    归并排序、快速排序、堆排序 时间复杂度 O(nlogn) 归并排序 快速排序(快排) 堆排序

  • 归并排序的Java实现

    归并排序算法的原理如下: 归并排序的时间复杂度:,空间复杂度:,稳定性:稳定

  • 看图说话排序算法之归并排序

    归并排序和快速排序类似,都典型以递归方式实现的算法,归并排序的时间复杂度分析也和快速排序的时间复杂度分析类似。本文...

  • 八大经典排序算法总结

    1.算法排序的时间复杂度:时间复杂度o(n^2)冒泡排序,选择排序,插入排序时间复杂度o(n*logn)归并排序,...

  • 数据结构 - 归并排序

    归并排序 - 算法思路 归并排序 - 动图演示 时间复杂度 O(nlogn) 代码实现 printVector: ...

  • 数据结构复习笔记 - 排序(下)

    归并排序和快速排序 时间复杂度为 O(nlogn) 归并排序 归并排序使用的就是分治思想。分治,顾名思义,就是分而...

  • 归并排序 merge sort

    归并排序 时间复杂度:平均、最好、最坏都是O(nlogn)空间复杂度:O(n)稳定性:稳定 算法解析 归并排序是使...

  • golang 归并排序

    归并排序的时间复杂度为:O(nlogn)

  • Rank

    快速排序不稳定算法。时间复杂度在最坏情况下是O(N2),平均的时间复杂度是O(N*lgN)。 归并排序归并排序的时...

  • python链表归并排序

    利用归并排序的思想,使用o(nlogn)时间复杂度,排序链表

网友评论

      本文标题:归并排序时间复杂度

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