二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x < a[n/2],则只要在数组a的左半部分继续搜索x,如果x > a[n/2],则只要在数组a的右半部搜索x.
时间复杂度可以表示O(h)=O(log2n)
基于循环的代码:
int BinarySearch_Recurrence(int sort_array[], int n, int target){
int begin = 0;
int end = n - 1;
while (begin <= end){
int mid = (begin + end) / 2;
if (target == sort_array[mid])
return 1;
else if(target < sort_array[mid]){
end = mid - 1;
}
else if(target > sort_array[mid]){
begin = mid + 1;
}
}
return 0;
}
基于递归的代码:
int BinarySearch_Recursive(int sort_array[], int begin, int end, int target){
if (begin > end){
return 0;
}
int mid = (begin + end) / 2;
if (target == sort_array[mid]){
return 1;
}
else if (target < sort_array[mid]){
return BinarySearch_Recursive(sort_array, begin, mid - 1, target);
}
else if (target > sort_array[mid]){
return BinarySearch_Recursive(sort_array, mid + 1, end, target);
}
}