资源简介 (共19张PPT)二分查找14二分查找0 1 2 3 4 5 6 7 8 9 10d 6 12 15 18 22 25 28 35 46 58 60j=len(d)-1i=0m=(i+j)/2key 12keyj=m-1二分查找又称折半查找,仅适用于有序表二分查找0 1 2 3 4 5 6 7 8 9 10d 6 12 15 18 22 25 28 35 46 58 60jim=(i+j)/2key 12keyj=m-1二分查找又称折半查找,仅适用于有序表二分查找0 1 2 3 4 5 6 7 8 9 10d 6 12 15 18 22 25 28 35 46 58 60jim=(i+j)/2key 12key>m,所以只能在右边查找i=m+1二分查找又称折半查找,仅适用于有序表二分查找0 1 2 3 4 5 6 7 8 9 10d 6 12 15 18 22 25 28 35 46 58 60jim=(i+j)/2key 12二分查找又称折半查找,仅适用于有序表key=m,查找成功CC二分查找二分查找又称折半查找,对分查找。它是一种效率很高的查找算法,但被查找的数据序列必须是有序的。6 12 15 18 22 25 28 35 46 58 60ij6 12 15 18 22 25 28 35 46 58 60ijm6 12 15 18 22 25 28 35 46 58 60ijm6 12 15 18 22 25 28 35 46 58 60ijm6 12 15 18 22 25 28 35 46 58 60jim0 1 2 3 4 5 6 7 8 9 10Key=12开始:第1遍比较:第2遍比较:第3遍比较:第4遍比较:二分查找的程序实现①存储待查找数据key等key=12;f=Falsed=[6,12,15,18,22,25,28,35,46,58,60]②i和j定义子数组的边界i=0;j=len(d)-1当存在待查找的子数组时,继续查找③确定本次查找的数据下标本次查找的数据下标为i,j的中点④若找到则停止循环,记录位置判断中点数据是否为key值:找到记录下标;做找到标记break没找到时,若中点数据偏大:key应在中点左侧没找到时,若中点数据偏小:key应在中点右侧⑤调整子数组范围继续查找if f==True:print("查找成功!第"+str(b+1)+"个数据")else:print("没有找到!")⑥输出查找结果二分查找的程序实现①存储待查找数据key等②i和j定义子数组的边界③确定本次查找的数据下标④若找到则停止循环,记录位置⑤调整子数组范围继续查找⑥输出查找结果key=12; f=Falsed=[6,12,15,18,22,25,28,35,46,58,60]i=0;j=len(d)-1while i<=j:m=(i+j)//2if d[m]==key:f=True;b=m;breakif keyj=m-1else:i=m+1if f==True:print("查找成功!第"+str(b+1)+"个数据")else:print("没有找到!")二分查找查找效率N:1经过x次除以21*2*2*……*2=N乘了x个2x=[log2N]对分查找的最多查找次数是[log2N]+1BBA知识小结:1. 二分查找算法的基本思想,适用范围;确定查找区间中点m的位置;2.总结查找键key值与d[m]比较的三种情况。感谢大家聆听 展开更多...... 收起↑ 资源预览