【发布时间】:2021-07-16 18:49:38
【问题描述】:
我很抱歉提出这个问题并且对此非常陌生, 但因此我的教授不允许我触摸 merge_sort 我不能比当前的合并做得更好, 请帮帮我。
问题是,我如何让 merge_enter code heresort 运行,而不触及 merge_sort 并且只重写 merge(s, s1, s2)?
def merge(s1, s2, s):
i = j = 0
while i + j < len(s1 + s2):
if i == len(s2) or ((i < len(s1)) and s1[i] < s2[j]):
s[i + j] = s1[i]
i += 1
else:
s[i + j] = s2[j]
j += 1
def merge_sort(s):
n = len(s)
if n < 2:
return
mid = n // 2
s1 = s[0:mid]
s2 = s[mid:n]
merge_sort(s1), merge_sort(s2)
merge(s1, s2, s)
if __name__ == '__main__':
S = [1, 7, 3, 5, 4, 2]
merge_sort(S)
print(S)
【问题讨论】:
-
哪个函数不能修改?您是否正在尝试实现合并排序功能?
-
我们不允许接触 merge_sort(s)。我们将实现合并(S,S1,S2)
-
除非您将合并作为作业编写,否则不要这样做 - 内置的
sort方法更快!几天前我遇到了这个:earthly.dev/blog/python-timsort-merge -
其实不是作业,更像是自学。我对所有其他排序算法(例如快速排序)都非常了解,但是合并排序让我停留了一段时间。这篇文章很吸引人,谢谢你的好意,但是我们的教授坚持最坏的情况输入 n > 2^1024,给他看那篇文章可能没用。
-
在切换到合并之前,您至少应该对最大的段使用内置排序。
标签: python recursion merge mergesort