python3.5
最優時間複雜度:nlog(n)
最壞時間複雜度:nlog(n)
穩定性:穩定
1.歸併排序思想:
將數組不斷對半拆分,直到只剩下單元素,在根據原本的結構不斷組合,設定left和right指標,在組合過程中,對兩指標所指示的位置的元素進行大小對比,小的提出,放入新數組,指標向右移動一位,再次進行對比,直到元素全部對比完成,若某一邊已經無元素,直接將另一邊的數放入新數組右側
2.python代碼實現
def merge_sort(alist):
'''歸併排序 '''
n = len(alist)
if n<=1:
return alist
mid = n//2
# left採用歸併排序後形成的有序的新的列表
left_li = merge_sort(alist[:mid])
# right_li 採用歸併排序後形成的有序新列表
right_li = merge_sort(alist[mid:])
# 將兩個列表組成新的整體
# merge(left_li,right_li)
left_pointer , right_pointer = 0 , 0
result=[]
while left_pointer < len(left_li ) and right_pointer< len(right_li):
if left_li[left_pointer] < right_li[right_pointer]:
result.append(left_li[left_pointer])
left_pointer+=1
else:
result.append(right_li[right_pointer])
right_pointer+=1
result += left_li[left_pointer:]
result += right_li[right_pointer:]
print(result)
return result
if __name__ =='__main__':
li = [17, 20, 26, 31, 44, 54, 55, 77, 93]
print(merge_sort(li))