class BinarySearch():
def search_iterative(self, list, item):
low = 0;
high = len(list) - 1
while(low<=high):
mid = (low + high) // 2 #位置
guess = list[mid]
if guess == item:
return mid # 反悔了位置
if guess < item:
low = mid + 1
if guess > item:
high = mid - 1
return None
def search_recursive(self, list, low, high, item):
if high >= low :
mid = (high + low) // 2
guess = list[mid]
if guess == item:
return mid;
elif guess < item:
return self.search_recursive(list, mid+1, high, item)
elif guess > item:
return self.search_recursive(list, low, mid-1, item)
else:
return None
if __name__=="__main__":
bs = BinarySearch()
myList = [1, 3, 5, 7, 9]
print("方法一:", bs.search_iterative(myList,3))
print("方法二:", bs.search_recursive(myList, 0, len(myList)-1, 3))
# -1
print("方法一:", bs.search_iterative(myList,-1))
print("方法二:", bs.search_recursive(myList, 0, len(myList)-1, -1))
两种方法,二选其一:
- def search_iterative 为普通版函数(方法1)
- def search_recursive 为递归版函数(方法2)
测试数据:
- 输入:myList = [1, 3, 5, 7, 9]
- 测试数据:3,-1
- 返回的是位置
注意:
- if name==“main”: 为两短横
- // 为整除
【输出】
方法一: 1
方法二: 1
方法一: None
方法二: None