核心:先确定待查目标所在的范围,然后逐步缩小范围直到查找成功或查找失败。
关键字key与表中某一元素Array[i]比较,有3中结果:
1.key==Array[i],查找成功。
2.key > Array[i],待查元素可能的范围是Array[i]之前。
3.key < Array[i],待查元素可能的范围是Array[i]之后。
二分查找基于上述的原理:每次将可能范围中间位置的数与key比较,相等则放回查找成功,不等则缩小范围。如下图:
关键字与当前范围中间位置元素比较:
关键字>中间位置元素,则缩小后的范围:中间元素右边
通过不断地缩小查找范围,知道查找成功,或者返回查找失败。
示例 程序如下:
二分查找的时间复杂度为 log2(N)。
3.二分查找的评估:
二分查找的效率较高,但要求序列有序。序列排序本身就是一种高代价操作,往有序序列内插入和删除数据都比较困难。因此,二分查找特别适合于很少改动,但需要经常查找的表。