合并排序
算法思想:采用分而治之的方法,将列表不断对半拆分,只至拆成长度为1的小列表(已排序),最后将这些已排序的短列表重新排序成完整长度的列表。时间复杂度为 。
def merge_sort(a_list):
print('Spliting list',a_list)
if len(a_list) > 1:
mid = len(a_list) // 2
lefthalf = a_list[:mid]
righthalf = a_list[mid:]
merge_sort(lefthalf)
merge_sort(righthalf)
i = 0
j = 0
k = 0
# 比较左右两边的值,将小的值排在前面
while i < len(lefthalf) and j < len(righthalf):
if lefthalf[i] < righthalf[j]:
a_list[k] = lefthalf[i]
i = i + 1
else:
a_list[k] = righthalf[j]
j = j + 1
k = k + 1
while i < len(lefthalf):
a_list[k] = lefthalf[i]
i = i + 1
k = k + 1
while j < len(righthalf):
a_list[k] = righthalf[j]
j = j + 1
k = k + 1
print('Merging',a_list)
Reference:
http://interactivepython.org/courselib/static/pythonds/SortSearch/TheMergeSort.html