首页 > 编程知识 正文

归并排序例题讲解,归并排序算法是利用什么实现的算法

时间:2023-05-05 04:10:50 阅读:191417 作者:780

文章目录 1、 归并排序(MergeSort)1.1 归并算法的排序过程1.2 用Python实现归并排序1.3 归并排序的空间及时间复杂度 2、主定理(Master Theorem)2.1 主定理的内容:2.2 利用主定理计算

1、 归并排序(MergeSort) 1.1 归并算法的排序过程

归并排序算法是分治法的典型应用,具体排序过程如下:

每次合并过程中,是将两个分组里的数从第一个数开始比较,把数字较小的放入容器(升序排列)。

以第二次合并过程为例:

1.2 用Python实现归并排序 def merge(a, b): # 从小到大合并两个有序列表 c = [] j = k = 0 while j < len(a) and k < len(b): if a[j] < b[k]: c.append(a[j]) j += 1 else: c.append(b[k]) k += 1 if j == len(a): for i in b[k:]: c.append(i) else: for i in a[j:]: c.append(i) return cdef MergeSort(lists): # 利用递归的思想进行归并排序 if len(lists) <= 1: return lists middle = len(lists) // 2 left = MergeSort(lists[: middle]) right = MergeSort(lists[middle:]) return merge(left, right)if __name__ == '__main__': a = [9, 5, 2, 8, 4, 6, 1, 3, 7] b = MergeSort(a) print(b) 1.3 归并排序的空间及时间复杂度

归并算法渗透着递归的思想,它在不断的递归拆分数据的过程中会占用栈的空间,其空间复杂度为O(n)

它的时间复杂度为O(nlogn),那么如何计算它的时间复杂度呢?本文之后的内容将通过主算法推导计算归并排序的时间复杂度的方法。

2、主定理(Master Theorem) 2.1 主定理的内容:

2.2 利用主定理计算

首先来看两个主定理的例子,以便更好地理解主定理:

接下来利用主定理计算归并排序的时间复杂度:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。