- 二分法,将一个不确认的值在一个区间范围内查找,则区最大值与最小值的平均数做对比,如果不等于则再开一个区间范围。比如:value = 4
在区间【1,10】做对比,如果 4 比 5小 则新开一个区间 【1, 5】做对比,4比3
大,继续开区间【3,5】最后位数等于对应的值则结束。
中心思想是:如果未知数比平均数大,则平均数将作为下一个区间的最小值,如果未知数比平均数小,平均数作为下一个区间的最大值。直到求的平均数等于未知数的时候
'''
1.拿到一个已知数组要先去重
2.用冒泡排序法,从小到大排序
3.用二分法得出输入值在对应的数组中的下标值
'''
aArry_list = [1, 4, 6, 7, 8, 0, 15, 2, 4]
aArry_list = list(set(aArry_list))
min = 0
max = length = len(aArry_list)
number = int(input('数字:'))
for i in range(length-1):
flag = False
for j in range(i + 1, length):
if aArry_list[i] > aArry_list[j]:
aArry_list[i] = aArry_list[i] ^ aArry_list[j]
aArry_list[j] = aArry_list[i] ^ aArry_list[j]
aArry_list[i] = aArry_list[i] ^ aArry_list[j]
flag = True
if flag == False:
break
for i in range(length):
middle = (min+max)//2
if number >= aArry_list[middle]:
if number == aArry_list[middle]:
print('index=',middle)
break
min = middle
else:
max = middle
另外一种根据数组的长度直接在区间内对半查找
aArry_list = [1, 4, 6, 7, 8, 0, 15, 2, 4]
aArry_list = list(set(aArry_list))
min = 0
max = length = len(aArry_list)
if length%2==0:
for i in range(length//2):
if value == aArry_list[i]:
print(i)
break
elif value == aArry_list[-1-i]:
print(length-1-i)
break
else:
if i == aArry_list[-1]:
print(length-1)
else:
for i in range(length // 2):
if value == aArry_list[i]:
print(i)
break
elif value == aArry_list[i+length//2]:
print(i+length//2)
break