數據結構-5.簡單算法python實現:歸併排序merge_sort

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))

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章