【问题标题】:IndexOutOfBoundsError MergeSort PythonIndexOutOfBoundsError 合并排序 Python
【发布时间】: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


【解决方案1】:
def merge(s1, s2, s):
    i = j = k = 0
    while i < len(s1) and j < len(s2):
        if s1[i] < s2[j]:
            s[k] = s1[i]
            i += 1
        else:
            s[k] = s2[j]
            j += 1
        k += 1
    
    while i < len(s1):
        s[k] = s1[i]
        i += 1
        k += 1
    while j < len(s2):
        s[k] = s2[j]
        j += 1
        k += 1

【讨论】:

    【解决方案2】:
    def merge(S1, S2, S):
    for s in range(0, len(S)):
        if len(S2) == 0:
            S[s] = S1[0]
            S1.pop(0)
        elif len(S1) == 0:
            S[s] = S2[0]
            S2.pop(0)
        elif S1[0] < S2[0]:
            S[s] = S1[0]
            S1.pop(0)
        else:
            S[s] = S2[0]
            S2.pop(0)
    

    已解决 nvm,请为您解答

    【讨论】:

      猜你喜欢
      • 2019-05-14
      • 2013-09-16
      • 2021-08-20
      • 2021-06-27
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多