二分查找要求:线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。不妨设有序表是递增有序的。
思路:循环实现和递归实现。
#循环实现
def HalfSearch(OrderedList, key, left, right):
while left <= right:
mid = (left + right) // 2
if key == OrderedList[mid]:
return mid
elif key > OrderedList[mid]:
left = mid + 1
else:
right = mid - 1
return None
#递归实现
def HalfSearch(OrderedList, key, left , right):
if left > right:
return None
mid = (left + right) // 2
if key == OrderedList[mid]:
return mid
elif key > OrderedList[mid]:
return HalfSearch(OrderedList, key, mid + 1, right)
else:
return HalfSearch(OrderedList, key, left, mid - 1)