归并排序
归并排序其实就是将一个长度为n数组拆分成一个个长度为1的子序列,然后再通过两两进行对比,组成n/2个长度为2的有序数组,然后再两组两组进行对比组合形成n/4个长度为4的有序数组,直至将整个数组排序完成。
下图更加形象的向我们展示了归并排序的整个流程。
那对于一个数组的归并排序其实总的来说就是两个步骤:分解和组合。分解就是将数组分割成一个个长度为1的子序列,组合就是想子序列进行组合,但是并不是简单的组合,而是排序后组合后一个有序的子序列。最后将分解的所有子序列组合在一起成为已经排好序的序列。
下面来看使用Python如何来实现归并排序:
#-*- coding:utf-8 -*-
# __author__ = 'ziteng'
# __time__ ='15:05'
def mergeList(lists):
if len(lists) <= 1:
return lists
mid = len(lists) / 2
listA = mergeList(lists[:mid])
listB = mergeList(lists[mid:])
return mergeSortList(listA,listB)
def mergeSortList(listA,listB):
li_sort = []
a = 0
b = 0
while a < len(listA) and b < len(listB):
if listA[a] < listB[b]:
li_sort.append(listA[a])
a += 1
else:
li_sort.append(listB[b])
b += 1
while a < len(listA):
li_sort.append(listA[a])
a += 1
while b < len(listB):
li_sort.append(listB[b])
b += 1
return li_sort
if __name__ == '__main__':
li = [9,4,6,3,5,2,7]
result = mergeList(li)
print (result)