Insertion sort and Merge sort

 Insertion sort(直接插入排序)

pseudocode:

                                                insertion sort (a,n)

 for j = 2 to n
         key = a[j]
         i = j -1
         while i>0 && a[i] >key
                   a[i+i] = a[i]
                   i = i-1
         a[i+1] = key


关于o 标记法

    数学上: o(g(n)) = {f(n): 存在正常数c1,c2,n0使得对于所有的n>=n0 都有 0<=c1*g(n)<=f(n)<=c2*g(n) }

   工程学上: 削减低阶元素;忽略系数

                       例如: 3N^3 + 90n^2 - 5n +100 = o(n^3)

    最坏时间复杂度:最坏情况下,对于每个j都需要排j次:      t(n)=∑o(j) =o(n^2)

    平均时间复杂度: t(n)=∑o(j/2) =o(n^2)

Merge srot (归并排序)

pseudocode

                                merge sort a(1,....,n)

if n = 1 ,done
recursively sort a(1,n/2)and a(n/2+1,n)
merge the two sort list

归并排序的时间复杂度分析首先,先针对每一步进行单独分析:

if n = 1 ,done                                                                              o(1)

recursively sort a(1,n/2)and a(n/2+1,n)                                2T(n/2)

merge the two sort list                                                             o(n)

于是归并排序的时间复杂度为:T(n) = o(1) + 2T(n/2) + o(n)

忽略o(1), 因此归并排序的时间复杂度现在转化为 求解:  T(n)= 2T(n/2) + c*n 要求c>0

转化为地归树为

                       cn
                       /   \
              T(n/2)  T(n/2)                                 

 

进一步                     

                      cn                                                  

                   /           \                                           

            cn/2             cn/2                                         

        /          \           /         \                                 

 T(n/4)     T(n/4)   T(n/4)   T(n/4)                               

 最终
                     cn                                                                                              

                 /            \                                                                                                                        

             cn/2             cn/2                     树的深度为lgn                                          

         /            \          /         \                                                                                                    

  cn/4         cn/4   cn/4     cn/4                                                                        

    ....            ....       ...           ....                                        

 o(1)                                         共有n个叶子节点,因此 对于叶子节点来说时间复杂度为o(n)

在求最坏时间复杂度时,将树的每一层近似的看成与叶子节点的时间复杂度相同,因此求解归并排序的时间复杂度为 o(nlgn)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值