我有一个典型的二进制搜索算法实现:
maps
测试数据如下:
def binarySearch(arr, element):
first = 0
last = len(arr) - 1
while first <= last:
i = (first + last) // 2
if arr[i] == element:
return 'Found at position: {}'.format(i)
elif arr[i] > element:
last = i - 1
elif arr[i] < element:
first = i + 1
当我按如下方式调用arr = ['0006', '000e', '000f', '0023', '002a', '002E1627', '0032A542', '0037']
函数时:
binarySearch()
我得到的输出为:
element = '002E1627'
print (binarySearch(arr, element))
但是,请输入以下内容:
Found at position: 5
我得到的输出为:
element = '002a'
print (binarySearch(arr, element))
此输出背后的原因是什么?
第二种情况的预期输出是:None
。
答案 0 :(得分:1)
问题是二进制搜索仅适用于已排序的数组/列表。
由于角色a
位于角色E
之后(小写总是在大写字母之后),因此您的列表根本不会被排序。
列表应为:
arr = ['0006', '000e', '000f', '0023', '002E1627', '002a', '0032A542', '0037']
然后您将获得所需的输出
答案 1 :(得分:1)
只需转换为单个案例:
def binarySearch(arr, element):
first = 0
last = len(arr) - 1
while first <= last:
i = (first + last) // 2
if arr[i].upper() == element.upper():
return 'Found at position: {}'.format(i)
elif arr[i].upper() > element.upper():
last = i - 1
elif arr[i].upper() < element.upper():
first = i + 1
element = '002a'
print (binarySearch(arr, element))
Found at position: 4