归并排序
归并排序的思想,源于分治法的思想,将一个无序的数组不断二分然后排序,再合并
def merge(left, right):
# 排序 并 合并 数组
result = []
i, j = 0, 0
# 对比,将小的放入result数组,当某一边遍历完成之后,跳出循环
while i<len(left) and j<len(right):
if left[i] < right[j]:
result.append(left[i])
i+=1
else:
result.append(right[j])
j+=1
# 剩下的都放入 result
result += left[i:]
result += right[j:]
return result
def mergesort(arr):
# 分割数组的长度小于2的时候,停止递归
if len(arr) < 2:
return arr
# 地板除,得到数组中间下标
mid = len(arr) // 2
# 将数组一分为二
left = mergesort(arr[:mid])
right = mergesort(arr[mid:])
return merge(left, right)
# 测试代码段
arr = [9,8,7,6,5,4,3,2,1]
arr = mergesort(arr)
print(arr)
算法复杂度分析
最好时间复杂度 | 最坏时间复杂度 | 平均时间复杂度 | 空间复杂度 | 稳定性 |
O(nlogn) | O(nlogn) | O(nlogn) | T(n) | 稳定 |
归并排序是一种稳定的排序算法