排序算法介紹——歸併排序(代碼不太理解)

歸併排序

####### 沒太懂,爲什麼每一次遞歸之後返回的left和right的值爲什麼會一直髮生變化呢

# 歸併排序merge
#思路:一生二,二生四,四生八,採用遞歸的方式先把整個數組拆分爲一個個元素
def merge_sort(merge_List):
    if len(merge_List)<=1:
        return merge_List
    mid = len(merge_List) // 2
    left = merge_sort(merge_List[:mid])
    right = merge_sort(merge_List[mid:])
    return merge(left,right)
def merge(left,right):
    res = []    #用來存放排序好的元素
    i,j =0,0
    print(right)
    print(left)
    len_left,len_right = len(left),len(right)
    print(len_right)
    print(len_left)
    while i<len_left and j<len_right:
        if left[i] < right[j]:
            res.append(left[i])
            i+=1
        else:
            res.append(right[j])
            j +=1
    res.extend(left[i:])
    res.extend(right[j:])
    return res

if __name__ =="__main__":
    merge_List = [5,6,2,11,4,3,9,8,1]
    merge_List = merge_sort(merge_List)
    print(merge_List)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章