[英]Implementing merge sort in python3
我不知道這是怎么回事。 誰能幫我在python3中做合並排序。請,我哪里出錯了...?
def merge_help(a,b):
c=[]
j=0
i=0
while(i<len(a) and j<len(b)):
if(a[i]>=b[j]):
c.append(b[j])
j+=1
elif(a[i]<=b[j]):
c.append(a[i])
i+=1
while(j<len(b)):
c.append(b[j])
j+=1
while(i<len(a)):
c.append(a[i])
i+=1
return c
def merge(a):
if(len(a)>1):
mid =len(a)//2
l=a[:mid]
r=a[mid:]
merge(l)
merge(r)
merge_help(l,r)
print(a)
merge([12,11,13,5,6,7])
不起作用。...沒有錯誤,但是每個遞歸步驟都返回相同的列表
您沒有捕獲merge_help的輸出,因此實際上並沒有更改'a'列表中的值。
您還嘗試就地執行此操作,這對於合並排序是不可能的。
在您的合並功能中,執行以下操作:
def merge(a):
if(len(a) > 1):
# Divide the list in two
mid = len(a)//2
left_unsorted = a[:mid]
right_unsorted = a[mid:]
# Sort both halves
left_sorted = merge(left_unsorted)
right_sorted = merge(right_unsorted)
# Merge the two sorted lists
a_sorted = merge_help(left_sorted, right_sorted)
else:
a_sorted = a.copy()
return a_sorted
注意:這不會對傳遞的列表進行排序; 它僅返回排序的版本。 因此,如果使用orig_list進行調用,則orig_list的結尾將保持不變。
您將字段從a和b追加到c,但是最后打印a。 也許這就是問題所在。
數組a永遠不會編輯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.