有序数组中的二分查找,简单理解的话,就相当于小时候玩过的一个小游戏:猜数。比如两个小朋友真真和飞飞玩猜数游戏。真真让飞飞猜1~50之间的那个数字17,当然飞飞事先不知道。飞飞就按二分查找这个比较快的方法来猜,他先猜25,然后真真提示说说偏大了;飞飞再猜13,真真又提示偏小了;飞飞再猜19,真真又提示说偏大了;飞飞于是猜16,真真提示说偏小了;飞飞再猜18,真真说偏大了。最后飞飞笑了笑,说出了正确的答案17。
这个游戏过程中飞飞总共猜了5次,这就是有序数组中二分查找的通俗理解。它可以快速地找到你要找到的数,因为每次猜数都可以帮你排除一半而缩小查找范围。
用java来实现可以用以下代码表示:
int[] a={0,1,2,3,4,5,6,7,8,9,10};
public int BinarySerach(int key){
int low=0;
int high=a.length-1;
while(true){
int mid=(low+high)/2;
if(a[mid]==key){
return mid;
}
if(low>high){
return a.length;
}
else {
if(a[mid]<key){
low=mid+1;
}
else{
high=mid-1;
}
}
}
}