[英]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.