参考:https://blog.csdn.net/perfer258/article/details/81985349
算法思想:
归并排序是采用分治法的一个典型的应用。归并排序的思想是先递归分解数组,再合并数组。
将数组分解到最小(只剩一位)之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就取谁。取了之后相应的指针后移一位。然后再比较,直到一个数组为空,最后把另一个数组的合并过来。
python实现:
def merge_sort(alist):
"""
归并排序
"""
sort(alist, 0, len(alist) - 1)
def sort(alist, low, high):
"""
"""
#分解
if low < high:
mid = int((low + high) / 2)
sort(alist, low, mid)
sort(alist, mid+1, high)
#合并
merge(alist, low, mid, high)
def merge(alist, low, mid, high):
"""
合并
"""
i, j = low, mid + 1
result = []
while i<=mid && j<= high:
if alist[i] <= alist[j]:
result.append(alist[i])
i += 1
else:
result.append(alist[j])
j += 1
if i <= mid:
result.extend(alist[i:mid+1])
if j <= high:
result.extend(alist[j:high+1])
alist[low:high+1] = result
最优时间复杂度 O(nlogN)
最坏时间复杂度 O(nlogN)
稳定排序