我已经实现了我认为是python中的合并排序算法。我以前从未在Python中编程,因此我使用了几个资源,这些命令对我来说似乎很陌生,以便更好地理解。
但是,我也从来没有实现过合并排序,所以我不确定我是否已经正确实现了它。任何指导,提示或更正将不胜感激。
这是我的合并方法:
def merge(left, right):
result = []
i, j = 0, 0
while(i < len(left) and j< len(right)):
if(len(left[i]) <= len(right[j])):
print(i)
result.append(left[i])
i=i+1
else:
result.append(right[j])
j=j+1
result += left[i:]
result += right[j:]
return result
同时,这是我的mergesort方法:
def mergesort(list):
if len(list) < 2:
return list
else:
middle = len(list) / 2
left = mergesort(list[:middle])
right = mergesort(list[middle:])
return merge(left, right)
感谢您提供任何可能的帮助! :)
答案 0 :(得分:3)
不要将变量命名为“list”。这是Python的数组类型的名称,因此使用同名的变量会令人困惑。
当你从条件中返回时,你不需要在else块中使用该函数的其余部分。
def mergesort(list):
if len(list) < 2:
return list
middle = len(list) / 2
left = mergesort(list[:middle])
right = mergesort(list[middle:])
return merge(left, right)
总的来说,这看起来很合理。
当然,除了练习之外,你应该使用list.sort或sorted()。
a = ["abc", "de", "f", "ghijkl"]
print sorted(a, lambda a,b: cmp(len(a), len(b)))
答案 1 :(得分:2)
如何使用sorted()
功能?像这样:
def len_cmp(x, y):
return len(x) - len(y)
my_strings = ["hello", "foo", "bar", "spam"]
print sorted(my_strings, len_cmp)