【问题标题】:What is the error in this merge sort implementation?此合并排序实现中的错误是什么?
【发布时间】:2017-03-19 04:23:49
【问题描述】:
def merge(l1,l2):

  (lmerged,i,j) = ([],0,0)

  while i+j < len(l1) + len(l2):
    if i == len(l1):
      lmerged.append(l2[j])
      j = j+1
    elif j == len(l2):
      lmerged.append(l1[i])
      i = i+1
    elif l1[i] < l2[j]:
      lmerged.append(l1[i])
      i = i+1
    elif l2[j] < l1[i]:
      lmerged.append(l2[j])
      j = j+1
    else:
      lmerged.append(l1[i])
      i = i+1
      j = j+1

  return(lmerged)    

def mergesort(l):
  if len(l) < 2:
    return(l)
  else:
    n = len(l)
    leftsorted = mergesort(l[:n//2])
    rightsorted = mergesort(l[n//2:])
    return(merge(leftsorted,rightsorted))

此代码示例中的错误是什么?此实施将在哪个列表上失败?逻辑是正确的还是我的逻辑本身有缺陷?

【问题讨论】:

  • 假设性问题是怎么回事?它在哪个列表没有失败了?它给出了什么错误?你真的有任何错误吗?
  • 我的老师说它没有通过测试列表,但他没有告诉我列表。现在我疯狂地想弄清楚它会在哪里失败。
  • 那你的老师不教你了。没有错误和列表来测试他希望您如何修改代码以按他的预期工作?

标签: python algorithm python-3.x mergesort


【解决方案1】:

失败测试[1, 1] 排序为[1]

修复:在最后一个else 块中删除merge 函数中的j = j + 1

【讨论】:

  • 谢谢你能告诉我这个完美的数字查找器功能在哪里失败了
  • def perfect(n): if n==1 or n==0: return True elif n
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
  • 2020-05-25
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
相关资源
最近更新 更多