📅  最后修改于: 2023-12-03 14:50:40.184000             🧑  作者: Mango
合并排序(Merge Sort)是一种常用的排序算法,采用分治法的思想,将待排序的列表划分成若干个子列表,直到每个子列表只有一个元素,然后不断合并相邻的子列表,直到最终排序完成。
合并排序的算法思路如下:
合并排序的实现代码如下所示:
def merge_sort(lst):
if len(lst) <= 1:
return lst
mid = len(lst) // 2
left_half = lst[:mid]
right_half = lst[mid:]
left_half = merge_sort(left_half)
right_half = merge_sort(right_half)
return merge(left_half, right_half)
def merge(left_half, right_half):
merged = []
i = j = 0
while i < len(left_half) and j < len(right_half):
if left_half[i] < right_half[j]:
merged.append(left_half[i])
i += 1
else:
merged.append(right_half[j])
j += 1
merged += left_half[i:]
merged += right_half[j:]
return merged
合并排序的时间复杂度为O(nlogn),其中n为待排序列表的长度。这是由于每次划分都将列表分为两个子列表,需要进行logn次划分,而每次合并都需要遍历n个元素,因此总的时间复杂度为nlogn。
合并排序的空间复杂度为O(n),其中n为待排序列表的长度。每次划分都会产生logn个子列表,而在合并的过程中需要使用一个新的列表来存储合并结果,因此需要额外的O(n)空间。
合并排序是一种高效的排序算法,具有稳定性和可扩展性的特点。它采用分治法的思想,通过不断划分和合并子列表来实现排序。合并排序的时间复杂度为O(nlogn),空间复杂度为O(n)。在实际应用中,合并排序常用于对大规模数据进行排序。