【发布时间】:2017-02-11 06:57:42
【问题描述】:
def merge (l1,l2):
if l1 and l2:
if l1 == [] and l2 == []:
return []
if l1[0] > l2[0]:
l1, l2 = l2, l1
return [l1[0]] + merge(l1[1:], l2)
return l1 + l2
def sort(l):
x = len(l) / 2
x = int(x)
y = merge(l[0:x], l[x+1:])
return y
我需要编写一个名为 sort 的递归函数;它被传递任何无序列表(全部为 int 或全部为 str),并返回一个新列表,该列表包含其参数列表中的每个值,但按排序/非降序排列。但是我不能调用任何执行排序的 Python 函数/方法。
另外,对于任何至少有 2 个值的列表,我必须将列表分成两半并递归调用 sort 来对每个较小的列表进行排序,我必须使用上面编写的合并函数来合并这两个排序的列表从这些递归调用返回
merge 是对两个列表进行合并和排序的函数
merge([1,3,5,8,12],[2,3,6,7,10,15]) returns [1,2,3,3,5,6,7,8,10,12,15].
例如,调用 sort([4,5,3,1,6,7,2]) 将在列表 [4,5,3] 和 [1,6,7,2] 上递归调用 sort) ,分别返回列表 [3,4,5] 和 [1,2,6,7],合并后将返回列表 [1,2,3,4,5,6,7]。
我的函数出现以下错误
39 *Error: sort([1,2,3,4,5,6,7]) -> [1, 2, 3, 5, 6, 7] but should -> [1, 2, 3, 4, 5, 6, 7]
40 *Error: sort([7,6,5,4,3,2,1]) -> [3, 2, 1, 7, 6, 5] but should -> [1, 2, 3, 4, 5, 6, 7]
41 *Error: sort([4,5,3,1,2,7,6]) -> [2, 4, 5, 3, 7, 6] but should -> [1, 2, 3, 4, 5, 6, 7]
42 *Error: sort([1,7,2,6,3,5,4]) -> [1, 3, 5, 4, 7, 2] but should -> [1, 2, 3, 4, 5, 6, 7]
我的排序方法有什么问题?有人可以帮我解决吗?提前致谢。
【问题讨论】: