1. 程式人生 > >Python實現歸併排序

Python實現歸併排序

歸併排序

歸併排序是典型的分治法的應用

思想:先遞迴分解陣列,再合併陣列

原理:將陣列分解最小之後,然後合併兩個有序陣列,基本思想是比較兩個陣列的最前面的數,誰小就取誰,取完後,將相應的指標後移以為。然後再比較,直到一個數組為空,最後把另一個數組的剩餘部分複製過來即可。

Python程式碼實現:

 歸併排序


def merge_sort(alist):
    if len(alist) <= 1:
        return alist
    # 二分分解
    num = len(alist) / 2
    left = merge_sort(alist[:num])
    right = merge_sort(alist[num:])
    # 合併
    return merge(left, right)


def merge(left, right):
    '''合併操作,將兩個有序陣列left[]和right[]合併成一個大的有序陣列'''
    # left與right的下標指標
    l, r = 0, 0
    result = []
    while l < len(left) and r < len(right):
        if left[l] < right[r]:
            result.append(left[l])
            l += 1
        else:
            result.append(right[r])
            r += 1
    result += left[l:]
    result += right[r:]
    return result


alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
sorted_alist = merge_sort(alist)
print(sorted_alist)

時間複雜度:

最優時間複雜度:O(nlongn)

最壞時間複雜度 :O(nlongn)

穩定性:穩定