【问题标题】:How to do this sort practice?如何进行这种排序练习?
【发布时间】:2016-05-03 03:18:39
【问题描述】:
def combine (l1,l2):
    if l1 == []:
        return l2
    if l2 == []:
        return l1
    if l1[0] <= l2[0]:
        return [l1[0]] + combine(l1[1:], l2)
    return [l2[0]] + combine(l1, l2[1:])

我正在尝试定义一个名为“sort”的函数来递归合并列表并返回一个新列表(不改变参数),其中包含 其参数列表中的每个值,但按排序/非降序排列。

def sort(l):
    if l == []:
        return []
    else:
        l1, l2 = l[0:int(len(l)/2)], l[int(len(l)/2):]
        s = combine(l1, l2)
        return sort(s)

但是,它总是给我一个错误:

RuntimeError: maximum recursion depth exceeded in comparison

【问题讨论】:

标签: python sorting recursion mergesort


【解决方案1】:

如果l 有任何项目,您的sort 函数会以相同大小的输入一遍又一遍地递归调用自身。这最终将导致RuntimeError。如果您更改函数以将给定的list 拆分为两个,对两半进行排序并组合结果,它会按预期工作:

def merge_sort(l):
    if len(l) <= 1:
        return l

    return combine(merge_sort(l[0:len(l)/2]), merge_sort(l[len(l)/2:]))

由于上述函数将给定的list 拆分为两个,因此递归最终将在len(l) &lt;= 1 时终止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多