[英]Merge Sort Python - Problems with sort function
我正在嘗試使此合並排序算法正常工作,而我對為什么它不會完全感到困惑。 合並功能似乎工作正常,但排序功能似乎無效。 我在網上搜尋解決方案,但似乎找不到我做錯了什么。 我應該提到的是,我一般對python和編碼還是比較陌生的,因此對您的幫助將不勝感激。 下面提供了python代碼:
def sort(sorted_list):
if len(sorted_list) <= 1:
return sorted_list
middle = len(sorted_list) // 2
left = sorted_list[:middle]
right = sorted_list[middle:]
left = sort(left)
right = sort(right)
return sorted_list(merge(left, right))
def merge(a_list, b_list):
combined_list = []
index_a = 0
index_b = 0
length_a = len(a_list)
length_b = len(b_list)
while index_a < length_a or index_b < length_b:
if index_a < length_a and index_b < length_b:
if a_list[index_b] <= b_list[index_b]:
combined_list += [a_list[index_a]]
index_a = index_a + 1
else:
combined_list += [b_list[index_b]]
index_b = index_b + 1
elif index_a < length_a:
combined_list += [a_list[index_a]]
index_a = index_a +1
else:
combined_list += [b_list[index_b]]
index_b = index_b + 1
return combined_list
這是怎么了:
return sorted_list(merge(left, right))
它應該是:
return merge(left, right)
另外,與您的錯誤無關,但此行應更正:
if a_list[index_b] <= b_list[index_b]:
到: if a_list[index_a] <= b_list[index_b]:
我已經對您的程序進行了一些修復。 這是固定程序。
def sort(sorted_list):
if len(sorted_list) <= 1:
return sorted_list
middle = len(sorted_list) // 2
left = sorted_list[:middle]
right = sorted_list[middle:]
left = sort(left)
right = sort(right)
return merge(left, right)
def merge(a_list, b_list):
combined_list = []
index_a = 0
index_b = 0
length_a = len(a_list)
length_b = len(b_list)
while index_a < length_a and index_b < length_b:
if a_list[index_a] <= b_list[index_b]:
combined_list.append(a_list[index_a])
index_a = index_a + 1
else:
combined_list.append(b_list[index_b])
index_b = index_b + 1
while index_a < length_a:
combined_list.append(a_list[index_a])
index_a = index_a + 1
while index_b < length_b:
combined_list.append(b_list[index_b])
index_b = index_b + 1
return combined_list
print sort([5,1,2])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.