包含重复元素数列的二分查找
在前面的二分查找代码示例里,待查数列中的每个数字都只出现了一次。如果数列中可以包含重复的元素,那能不能得出正确结果呢?
比如,我们把待查数列改成:arr = [ 3, 5, 5, 5, 5, 9, 7, 12, 15, 18, 32, 66, 78, 94, 103, 269]
其中的5重复了4次,然后运行代码:
from searchAlgorithms import binarySearch
arr = [ 3, 5, 5, 5, 5, 9, 7, 12, 15, 18, 32, 66, 78, 94, 103, 269]
tn = 5
result = binarySearch(arr, tn)
if (result >= 0):
print("Succeeded! The target index is: ", result)
else:
print("Search failed.")
输出结果为:
Succeeded! The target index is: 3
下标为3的元素是数列第四个元素,确实是5没错。
如果我们的目的仅仅是找到数列中任何一个和目标数一样的元素就可以了,那么在查找包含重复元的数列时,就用标准二分查找算法就可以了。