二分查找
时间复杂度
时间复杂度: O ( l o g n ) O(log n) O(logn)。在每次循环迭代中,我们将搜索空间减少了一半。
空间复杂度
空间复杂度:O(1),仅使用了常数空间(没有使用额外的空间)。
代码
def binarySearch(inputList, item):
left = 0
right = len(inputList)-1
while left <= right:
mid = int((left + right) / 2)
if inputList[mid] == item:
return inputList[mid], mid
if inputList[mid] < item:
left = mid + 1
else:
right = mid - 1
return None
if __name__ == '__main__':
myList = [1, 2, 3, 4, 5, 6, 7, 8]
value, index = binarySearch(myList, 4)
print(value, index)
PS: 如果mid = int((left + right) / 2)
处不转换为整型会报错:TypeError: list indices must be integers or slices, not float
,因为列表索引必须是整型或者切片。