需求分析
设a[0:n-1]是已排好序的数组。试改写二分搜索算法,使得当搜索元素x不在数组a中时,返回小于x的最大元素的位置i和大于x的最小元素的位置j;当搜索元素x在数组a中时,返回x在数组中的位置,此时i和j相同。
**
代码如下
**
def binary_search(arr_list, arr_lookup):
arr_Long = len(arr_list)
first = 0
last = arr_Long - 1
while first < last:
mid = (last + first) // 2
if arr_list[mid] > arr_lookup:
last = mid
elif arr_list[mid] < arr_lookup:
first = mid + 1
else:
return mid
if __name__=='__main__':
print("请输入数组数据:",end="")
arr_list=list(map(int,input()))
arr_list.sort()
print("你输入的数组为:",end="")
print(arr_list)
arr_Long=len(arr_list)
print("请输入您要查找的数字:")
arr_lookup=int(input())
if arr_lookup in arr_list:
x = binary_search(arr_list,arr_lookup)
print("数字存在数组当中!数组下标为:",x)
else:
print("你要找的数字不在这个列表里!")
for y in range(arr_Long):
if arr_list[y]<arr_lookup:
y+=1
else:
if max(arr_list)<arr_lookup:
print("没有比你查找数字更大的了!")
print("比查找数字小的最大数组元素下标为",arr_Long-1)
elif min(arr_list)>arr_lookup:
print("没有比查找数字还小的了!")
print("比查找数字大的最小数组元素下标为0")
else:
print("比寻找数字大的下标为",y)
print("比寻找数字小的下标为",y-1)
break