摘要
二分查找,一个很经典的算法。但是真正理解透彻这个算法却不容易。下面记载一点自己学习二分查找的心得。
参考
正文:
二分查找有N多种写法,有各种各样的形式,选一种合适自己,自己能够理解记住的才是最好的。下面分享一个我比较赞的版本。
对于最最最原始的二分查找,即给出一个Key,查找出key值的索引号。
注意注意注意!!最经典的二分查找对返回来的索引号没有任何要求,只要其对应的值是Key就可以了!!!!
核心代码:
int binarySearch(int a[],int key,int left,int right)
{
while(left+1 < right)
{
int mid=(left+right)/2;
if (a[mid]==key) {return mid;}
else if (a[mid]<key)
{
left=mid;
}
else {
right=mid;
}
}
if ( a[left]==key) return left;
if ( a[right]==key) return right;
return -1;
}
很多版本不同的地方其实就是在于while循环条件的判断和left(low、l)、right(high、hi)和mid的关系。
比较常见的有:
int binarySearch(int a[],int key,int left,int right)
{
while(left<=right)
{
int mid=(left+right)/2;
if (a[