1、-猜商品价格,¥5288,参考价:50006000元,二分查找算法及程序实现,二分查找的原理和方法,(1)二分查找是效率很高的查找方法,但被查找的数据必须是有序的。,(2)首先将查找的数与有序数组内处于中间位置的数据比较,如果中间位置上的数与查找的数不同,根据有序性,就可确定应该在数组的前半部分还是后半部分继续查找。,(3)在新确定的范围内,继续按上述方法进行查找,直到获得最终结果。,以规模为16的升序数组d为例:用一个数组d(1 to 16)来存放序列。,以规模为16的升序数组d为例:用一个数组d(1 to 16)来存放序列。,用i表示查找范围的第一个数组元素的下标,j表示最后一个数组元素的
2、下标,m 表示中间位置元素的下标。,(1)第一种情况:要找的值在后半部分,以查找键Key=85为例,第一次查找:范围d(1)d(16),(1)第一种情况:要找的值在后半部分,以查找键Key=85为例,第一次查找:范围d(1)d(16),比较后i=m+1,d(m)Key所以可以确定接下来要找的范围是后半部分。,第二次查找:范围d(9)d(16),第二次查找:范围d(9)d(16),比较后:i=m+1,d(m)Key 所以可以确定接下来要找的范围是后半部分。,第三次比较:范围d(13)d(16),第三次比较:范围d(13)d(16),d(m)=Key ,找到了。,思考:如果要找的是98 , i,j
3、,m分别是多少?,总结一: 如果d(m)key ,新查找的范围为下半部分, j值不变,i=m+1,讨论:两人为一合作小组,讨论一下key=15和key=51的查找示意图,并用共同的智慧讨论并回答以下两个问题。,问题1:当d(m)key时,新查找的范围在哪里?i和j如何变化?,问题2:在什么情况下查找会结束?继续进行重复查找的条件是什么?,(2)第二种情况:要找的值在前半部分;,以查找键Key=15为例,(2)第二种情况:要找的值在前半部分;,以查找键Key=15为例,(2)第二种情况:要找的值在前半部分;,以查找键Key=15为例,(2)第二种情况:要找的值在前半部分;,以查找键Key=15为例,总结二:如果d(m)key ,新查找范围为上半部分, i值不变,j=m-1。,第三种情况:要找的值找不到;,以查找键Key=51为例,第三种情况:要找的值找不到;,以查找键Key=51为例,第三种情况:要找的值找不到;,以查找键Key=51为例,第三种情况:要找的值找不到;,以查找键Key=51为例,第三种情况:要找的值找不到;,以查找键Key=51为例,总结三:(1)找到了查找会结束; (2)在i=j时重复查找,如果还是找不到,查找也会结束。,