目录
什么是二分
假设一维数组 data 已经按升序排列,二分查找算法根据当前需要查找的区间[left,right]定义一个中间位置 middle=(left+right)/2,将待查找值 x 与数组元素 data[middle]进行比较,有三种情况:
(1)x=data[middle],则找到了该元素;
(2)x>data[middle],由于数组是按升序排列的,待寻找的值要么不在数组中,要么只可能在右半区间[middle+1,right];
(3)x<data[middle],待寻找的值要么不在数组中,要么只可能在左半区间[left,middle-1]。由于每次查找都是在原区间的一半内进行,又称为折半查找,总的时间复杂度为 Ο(logn)。
举例
以一个具体的例子来说明二分查找的工作过程。设 data[10]={1,2,3,4,5,6,7,8,9,10},待查找的值 x=7,初始时,需要查找的区间为[left=0,right=9],中间位置 middle=(left+right)/2=(0+9)/2=4,由于 data[4]=5<x=7,则应该在右半区间[left=middle+1=5,right=9]中继续查找,此时 middle=(5+9)/2=7,而 data[7]=8>x=7,应该继续在左半区间[left=5,right=middle-1=6]中查找,之后 middle=(5+6)/2=5