【问题标题】:Merge sort in descending order in Python在Python中按降序合并排序
【发布时间】:2019-10-07 09:19:18
【问题描述】:

我对编程和 Python 非常陌生,我尝试理解归并排序。

我正在尝试实现合并排序功能。我希望它以升序(reverse = False)和降序(reverse = True)的顺序工作。我想自己实现反向部分,不想使用reverse()等内置方法。

我在第一个 while 循环的 if 语句中将 ''。但是,当我使用 reverse = True 和 lst = [2, 4, 1, 3, 8, 5] 运行程序时,我得到以下信息:

[3, 5, 8, 1, 2, 4]

期望的输出是:

[8, 5, 4, 3, 2, 1]

有人知道我可以如何更改我的函数,以便它也可以按降序工作吗?

def merge(lst, reverse=False):

    if len(lst) < 2:
        return lst

    middle = len(lst) // 2
    left = merge(lst[:middle])
    right = merge(lst[middle:])

    i, j, k = 0, 0, 0

    if reverse:    
        while i < len(left) and j < len(right):
            if left[i] >= right[j]:
                lst[k] = left[i]
                i += 1
            else:
                lst[k] = right[j]
                j += 1
            k += 1

        while i < len(left):
            lst[k] = left[i]
            i += 1
            k += 1

        while j < len(right):
            lst[k] = right[j]
            j += 1
            k += 1

    else:
        while i < len(left) and j < len(right):
            if left[i] <= right[j]:
                lst[k] = left[i]
                i += 1
            else:
                lst[k] = right[j]
                j += 1
            k += 1

        while i < len(left):
            lst[k] = left[i]
            i += 1
            k += 1

        while j < len(right):
            lst[k] = right[j]
            j += 1
            k += 1

    return lst 

lst = [2, 4, 1, 3, 8, 5]
print(merge(lst, True))
´´´

【问题讨论】:

    标签: python


    【解决方案1】:

    您不会将开关传播到递归中。这些行:

    left = merge(lst[:middle])
    right = merge(lst[middle:])
    

    应该是

    left = merge(lst[:middle], reverse)
    right = merge(lst[middle:], reverse)
    

    编辑:

    我不想使用内置方法

    另外,为了好玩,你正在使用的内置函数列表(我可能忘记了一些):list.__len__int.__lt__int.__floordiv__list.__getitem__int.__ge__int.__add__、@ 987654329@、int.__le__int.__str__,显然还有print。摆脱内置函数并不容易:P

    【讨论】:

      猜你喜欢
      • 2018-11-20
      • 1970-01-01
      • 2016-04-03
      • 2017-08-06
      • 2022-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      相关资源
      最近更新 更多