1、問題描述:排序算法中歸併排序是於1945年由馮·諾伊曼首次提出,可以通過遞歸實現和非遞歸實現,本次採用遞歸實現。遞歸實現的歸併排序是算法設計中分治策略的典型應用。
2、性能分析:
最差時間複雜度爲:O(nlogn)
最優時間複雜度爲:O(nlogn)
平均時間複雜度爲:O(nlogn)
所需輔助空間爲:O(n)
穩定性:穩定
3、代碼
def merge_sort(a):
if len(a) <= 1:
return a
mid = len(a)//2
left = merge_sort(a[:mid])
right = merge_sort(a[mid:])
res = []
i = j = 0
while i < len(left) and j < len(right):
if left[i] <= right[j]:
res.append(left[i])
i += 1
else:
res.append(right[j])
j += 1
if i == len(left):
res.extend(right[j:])
else:
res.extend(left[i:])
return res