歸併排序-Python

歸併排序的時間複雜度O(nlogn),空間複雜度為O(n)

首先我們先假設有兩個有序數組,我們去進行一次歸併

 

用程式碼實現

def merge(li: list, start: int, mid: int, end: int) :
    res=[]
    j = mid +1
    while start <= mid and j <= end:
        if li[start] < li[j]:
            res.append(li[start])
            start +=1
        else:
            res.append(li[j])
            j +=1
    #運行到這一步,說明左右兩邊一定有一遍已經下標已經超了,即一定有一遍數字已經沒了
    #然後判斷如果是左邊還有數字就把左邊剩下的數字全部插入列表中,無需在做判斷
    #判斷如果是右邊還有數字就把左邊剩下的數字全部插入列表中,無需在做判斷
    while start <= mid:
        res.append(li[start])
        start +=1
    while j <= end:
        res.append(li[j])
        j +=1
    
    return res

 最後交給遞歸