分治算法:递归的多重应用
1. 归并排序与快速排序
1.1 归并排序
归并排序是一种经典的分治算法,其核心在于将两个已排序的列表合并成一个有序列表。以下是合并两个有序列表的 Python 代码:
# lists a and b are sorted in ascending order
def merge(a, b):
if a == []:
return b
elif b == []:
return a
else:
if a[0] < b[0]:
return [a[0]] + merge(a[1:], b)
else:
return [b[0]] + merge(a, b[1:])
归并排序的时间复杂度为 Θ(nlogn),因为合并操作的时间复杂度是线性的,而递归分解的深度是 logn。
1.2 快速排序
快速排序同样基于分治思想,由 Tony Hoare 开发。与归并排序不同,快速排序在最坏情况下的时间复杂度为 O(n²),但在最好和平均情况下为 Θ(nlogn),在实际应用中可能比归并排序更快。
快速排序的分解过程较为复杂,它使用一个枢轴(pivot)将列表分为两部分:小于等于枢轴的元素和大于枢轴的元素。以下是一个较慢版本的快速排序实现:
def quicksort_variant(a)
超级会员免费看
订阅专栏 解锁全文
817

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



