折半查找,又称为二分查找,它的前提是线性表中的记录必须是关键码有序(通常是从大到小),线性表必须采用顺序存储。
算法思想:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;
若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;
若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。
不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。
具体代码实现如下:
// 用递归实现
int binarySearch(int[] arr ,int start ,int end,int key){
int mid = (start+end)/2;
if(key == arr[mid]){
return mid;
}
if(start>=end){
return -1;
}else if (key > arr[mid]) {
return binarySearch(arr, mid + 1, end, key);
} else if (key < arr[mid]) {
return binarySearch(arr, start, mid - 1, key);
}
return -1;
}
折半查找的时间复杂度为o(logn).