歸併排序
####### 沒太懂,爲什麼每一次遞歸之後返回的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)