方法1:
l = [1,2,3,4,5,6,7,8,9]
find_num = int(input('请输入需要找的数字'))
start = 0
end = int(len(l))-1
while True:
middle = int((start+end)//2)
if l[middle] == find_num:
print("找到您要找的数字%d在数列中的位置是%d" %(find_num,middle+1))
break
elif l[middle] > find_num:
end = middle -1
elif l[middle] < find_num:
start = middle +1
缺点:必须为有序递减整数序列
方法2:
def bubb_sorted(a):
if not isinstance(a,(list,set)):
return '输入为非序列'
for k in range(len(a)):
if not isinstance(a[k],(int,float,complex)):
return '序列中为非数字'
for j in range(len(a)-1):
for i in range(len(a)-1):
if a[i]>a[i+1]:
l=a[i+1]
a[i+1]=a[i]
a[i]=l
return a
def midd_find(List1,x):
if not isinstance(List1,(list,set)):
print('Error')
return print('输入为非序列')
if not isinstance(x,(int,float,complex)):
print('Error')
return print('要找的数字为非数字')
List=bubb_sorted(List1)
print(List)
start_index=0
end_index=len(List)-1
middle_index=0
import math
count=math.ceil(math.log(len(List),2))
count1=0
while count>0:
middle_index=(start_index+end_index)//2
count1+=1
if x == List[middle_index]:
print('找到了,位置在第%s个' %(middle_index+1))
print('运行%s次' %count1)
return middle_index
elif x>List[ middle_index]:
start_index=middle_index
elif x<List[ middle_index]:
end_index=middle_index
count-=1
if count==0:
print('要找的数没有在序列中')
print('运行%s次' %count1)
return None
#midd_find([3,6,1,22,5,0,34,27],5)
#midd_find([3,6,1,22,5,0,34,27],10)
midd_find([3,6,1,22,5,0,34,27],'a')
midd_find('abc','a')