您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python列表中的二进制搜索

Python列表中的二进制搜索

好吧,您的代码中有些小错误。要找到它们,您应该使用调试器,或者至少添加跟踪以了解会发生什么。这是您的原始代码,带有使问题显而易见的跟踪:

def search(list, target):
  min = 0
  max = len(list)-1
  avg = (min+max)/2
  print list, target, avg
  ...

您可以立即看到:

修复程序现在很简单:

elif (list[avg] < target):
      return avg + 1 + search(list[avg+1:], target)  # add the offset
    else:
      return search(list[:avg], target)  # sublist ends below the upper limit

这还不是全部,当您以结束循环时min == max,您不会返回任何内容(意味着您将返回None)。最后但并非最不重要的一点是, 为自己的变量使用标准Python库中的名称

所以这是固定代码

def search(lst, target):
  min = 0
  max = len(lst)-1
  avg = (min+max)/2
  # uncomment next line for traces
  # print lst, target, avg  
  while (min < max):
    if (lst[avg] == target):
      return avg
    elif (lst[avg] < target):
      return avg + 1 + search(lst[avg+1:], target)
    else:
      return search(lst[:avg], target)

  # avg may be a partial offset so no need to print it here
  # print "The location of the number in the array is", avg 
  return avg
python 2022/1/1 18:39:22 有236人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶