1.定义:二分查找又叫折半查找,该方法主要将数列有序排列,采用跳跃式的方式查找数据。以递增数列为例,先以中点位置的元素作为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。每一次比较后都可以将查找区间缩小一半。 二分查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。在一个有n个元素的有序序列中,利用二分查找大约需要log以2为底n的对数次。但是二分法查找的前提条件是被查找的数据必须是有序的。
例题1:猜数字
import random
num=random.randint(1,1000)
mynum=int(input('请输入mynum='))
n=1
while not(mynum==num):
n+=1
if mynum<num:
print("输入的数小了")
elif mynum>num:
print("输入的数大了")
print("输入不正确,请再次输入")
mynum=int(input('请输入mynum='))
print("你猜对了!","一共用了",n,"次")
input("运行完毕,请按回车键退出...")
例题2:假设一本字典大约1000页,目标信息在第328页,求最少的翻页次数。
x=int(input("请输入要查找的1000以内的整数:"))
step=0
flag1=1
flag2=1000
while(flag1<=flag2):
mid=(flag1+flag2)//2
step=step+1
if mid>x:
flag2=mid-1
elif mid<x:
flag1=mid+1
else:
break
print("查找次数为:",step)
例题3:输入任意一个数,用二分法查找它在列表中的位置。
列表为:nums=[2,4,8,9,10,20,30,77,88,100]
代码如下:
def search(x,nums):
low = 0
heigh = len(nums)-1
while low <=heigh:
mid =(low+heigh)//2
if x == nums[mid]:
return mid
elif x > nums[mid]:
low = mid+1
else:
heigh = mid-1
return -1
nums =[2,4,8,9,10,20,30,77,88,100]
num = int(input("请输入你要查找的数:"))
print("你要找的数在数组从0开始的第",search(num,nums),"个位置")
例题4:
代码如下:
扫描二维码关注公众号,回复:
17234880 查看本文章
def f(x):
#定义方程
return x**3-x**2+x-1
a=float(input("请输入解区间的左边界:"))
b=float(input("请输入解区间的右边界:"))
while abs(b-a)>1e-6:
x0=(a+b)/2
if f(a)*f(x0)<0:
b=x0
if f(b)*f(x0)<0:
a=x0
if f(x0)==0:
break
print("解为:",x0)