我比较喜欢归并排序的一点是其时间复杂度稳定
import math
def mergeSort(arr): #归并排序
if(len(arr)<2):
return arr
middle = math.floor(len(arr)/2)
left, right = arr[0:middle], arr[middle:]
return delete_repeat_merge(mergeSort(left), mergeSort(right)) #递归调用
#类似深度优先遍历二叉树,逐步分半,向下,直到两边均只有一个数即len(arr)<2停止向下
#开始对比合并,不断返回上层
def delete_repeat_merge(left,right): #在归并排序的基础上添加了删除重复元素的功能
result = []
while left and right:
if left[0] < right[0]: #最小的数出队,添加至合并序列尾
result.append(left.pop(0))
elif left[0] == right[0]:
result.append(left.pop(0))
right.pop(0) #出现重复数,均出队,但只入一个至合并序列
else:
result.append(right.pop(0));
while left:
if left[0] == result[-1]:
left.pop(0)
else:
result.append(left.pop(0))
while right:
if right[0] == result[-1]:
right.pop(0)
else:
result.append(right.pop(0));
# print(result)
return result #返回合并序列
#测试
array_test1 = [2,1,3,4,6,5]
array_test2 = [7,4,9,11,13,4]
total_array = mergeSort(array_test1 + array_test2)
print(total_array)