二分查找算法
前提
二分查找算法一般用于在有序数组中进行查找,对于无序数组而言,使用二分查找时,首先需要对数组进行排序,经典的排序算法有很多,此处不进行讨论。
二分查找算法
在有序数组a[n]中用二分法查找关键字key,算法如下。
int binarySearch(int arr[],int size, int key){
int low = 0;
int high = size;
int mid;
// 当初始值设置为两端时 一般截止条件为low <= high
while(low <= high){
mid = low + ((high-low) >> 1); //此处注意数据溢出问题
if(key > arr[mid]){
//待查找的key值在mid的右边,故下次在索引为mid+1与high之间查找
low = mid+1;
}else if(key < arr[mid]){
//待查找的key值在mid的右边,故下次在索引为mid+1与high之间查找
high = mid-1;
}else{
//找到key值的index
return mid;
}
}
//当low > high时,此时数组中没有找到key值
return -1;
}
注意事项
- 在计算 mid 值的时候注意溢出的问题。
mid = (low + high) / 2
中(low + high)
容易出现数据溢出问题,即二者之和超出数据类型的表示范围。采用>> 1
的效果与/ 2
的效果相同,但前者更加高效。