【发布时间】: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