【发布时间】:2013-05-11 03:17:42
【问题描述】:
我正在尝试实现二进制搜索;它需要一个有序列表,获取中间值,将其与目标值进行比较,然后在中间值上方或下方列出子列表,直到找到目标或从列表中丢失。但是,出于某种原因,除非中点是目标,否则我总是返回“无”。我不确定出了什么问题。
def bisect(list,target):
print list
split= list[len(list)//2]
print "Split value : " + str(split)
if target==split:
return "target"
elif target<split:
bisect(list[:split],target)
elif target>split:
bisect(list[(split):],target)
a= [1,2,3,4,5,6,7,8,9,10]
print bisect(a,2)
Output:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Split value : 6
[1, 2, 3, 4, 5, 6]
Split value : 4
[1, 2, 3, 4]
Split value : 3
[1, 2, 3]
Split value : 2
None
拆分和目标值之间的最后一次比较似乎没有发生?
【问题讨论】:
-
为什么不使用bisect 模块?
-
@FredrikPihl 或至少 - 看看
bisect模块如何实现其功能以进行比较 -
附带说明:调用您的列表
list会造成混淆,这意味着您不能在函数中使用同名的类型/构造函数。 -
@abarnert true 我没有使用该类型,所以它会导致问题,但我这样做的方式很糟糕。我会改的。
标签: python python-2.7