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)的线性时间。

      

    陈小洁的三只猫
  • 相关阅读:
    Python day43 :pymysql模块/查询,插入,删除操作/SQL注入完全问题/事务/模拟登录注册服务器/视图/函数/存储过程
    docker
    Linux 05
    Linux04
    Linux 03
    Linux 02
    go语言
    go语言
    go语言
    Linux
  • 原文地址:https://www.cnblogs.com/ccpang/p/11416256.html
Copyright © 2011-2022 走看看