算法:归并排序

    排序思路

    利用分治的思想,将数组从中间拆分,比较,再合并,

    递推公式     merge_sort(left...right)=merge_sort(merge_sort(left...middle),merge_sort(middle+1...right))

    终止条件

    left >= right

    时间复杂度分析

   对n个元素进行排序需要时间为T(n),拆分数组后两个数组的排序的时间为T(2n)

    merge_sort_B中合并数组的时间复杂度是O(n)

    归并排序的时间复杂度的计算公式为

    T(1) = C  -> n=1的时候,时间复杂度为常量级的执行时间

    T(n)  = 2*T(n/2) + n

        = 4*T(n/4) + 2*n

        = 8*T(n/8) + 3*n

        = ...

        = 2^k *T(n/2^k)+ k*n.

    当 T(n/2^k) = T(1)  ---> n/2^k = 1 ---> k = log以2为底n的对数 ---> k= log(n)/log(2)

    将k代入上面的公式 T(n) = Cn + n * (log(n)/log(2))

    减去常量Cn和log(2)之后

     O(n*log(n)) = O(nlogn)

    --------------------------

    空间复杂度分析

    在merge_sort_B每次执行的时候都会创建一个临时数组other

    但是因为每次和并完成之后other会被释放

    所以只需要一个临时空间并且大小不会超过n个数据的大小

    这样空间复杂度就为O(n)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容