zoukankan      html  css  js  c++  java
  • 归并排序(mergesort)

    一、算法思路:

      分治策略:向量与列表通用  

      序列一分为二   // O(1)

      子序列递归排序   // 2 x T(n/2)

      合并有序子序列   // O(n)


    二、举例如下:

      T(n) = 2*T(n/2) + O(n)  T(n) = O(nlog(n))  利用替换法即可求解;其中O(n)是归并两个已排序子序列的时间。

      

      二路归并merge原理如下所示:

      

         二路归并merge实现如下:

       开辟空间B来存储_elem[lo,mi)中的元素,而_elem[mi,hi)的元素并不需要开辟新的空间来缓存,只需要定义一个指针C指向这段内存就可以了。

      

      二路归并的再次改进:

      因为C是位于A的后半段,当B完全耗尽时,不需要在执行A[i++] = C[k++]; 所以不需要等待C耗尽,一旦B耗尽,就终止。所以交换循环体内两句的次序,删除冗余逻辑。

      

      二路归并的复杂度: 将j+k作为一个整体来看,最坏情况下,只需要O(n)的线性时间。

      

    陈小洁的三只猫
  • 相关阅读:
    clone()与clone(true)的区别
    内部插入节点的方法
    jquery动态创建页面元素
    removeClass() 方法
    addClass() 和 toggleClass()
    CSS()方法设置元素样式
    val()方法
    html() 和 text() 方法的区别
    C#导出Excel那些事
    Winform控件重写
  • 原文地址:https://www.cnblogs.com/ccpang/p/11416256.html
Copyright © 2011-2022 走看看