归并排序(Merge sort)该算法是采用分治法(Divide and Conquer)的典型应用。
作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:
1. 自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法);
2. 自下而上的迭代;
和选择排序一样,归并排序的性能不受输入数据的影响,始终都是 O(nlogn) 的时间复杂度;需要额外的内存空间。
算法步骤
申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;
设定两个指针,最初位置分别为两个已经排序序列的起始位置;
比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;
重复步骤 3 直到某一指针达到序列尾;
将另一序列剩下的所有元素直接复制到合并序列尾。
def merge_sort(sample: list):
'''
划分列表为左右两个部分,指导左右两部分都只有一个值
再讲左右两部分输入merge函数
递归调用
:param sample:
:return:
'''
if len(sample) < 2:
return sample
middle = math.floor(len(sample) / 2)
left, right = sample[0: middle], sample[middle:]
return merge(merge_sort(left), merge_sort(right))
def merge(left, right):
result = []
while left and right:
if left[0] <= right[0]:
result.append(left.pop(0))
else:
result.append(right.pop(0))
while left:
result.append(left.pop(0))
while right:
result.append(right.pop(0))
return result
参考:https://www.cnblogs.com/kaibindirver/p/12093823.html
本文详细介绍了归并排序算法,这是一种基于分治法的典型应用,具有稳定的O(nlogn)时间复杂度。算法通过递归或迭代将列表分为两部分,然后合并排序。归并排序过程包括申请额外空间、比较元素、合并序列等步骤。提供的代码示例展示了如何使用Python实现归并排序。
--归并排序&spm=1001.2101.3001.5002&articleId=110383466&d=1&t=3&u=09834a67c0ec4e6baff7c3ee27f15780)
378

被折叠的 条评论
为什么被折叠?



