目录
二分查找算法是查找算法里面非常简单的一个,这里给出二分查找算法的递归和非递归的代码。
注意:二分查找算法的前提是序列有序。
非递归
//假设arr从小到大有序,找见返回下标,找不见返回-1
int BinarySearch(int* arr, int len,int key)
{
assert(arr != NULL && len > 0);
int left = 0;
int right = len - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] == key)
return mid;
if (arr[mid] < key)
left = mid + 1;
else
right = mid- 1;
}
return -1;
}
递归
//假设arr从小到大有序,找见返回下标,找不见返回-1
int BinarySearch(int* arr, int begin,int end,int key)
{
if (begin > end)
return -1;
int mid = (begin + end) / 2;
if (arr[mid] == key)
return mid;
if (arr[mid] > key)
BinarySearch(arr, begin, mid - 1, key);
else
BinarySearch(arr, mid+1, end, key);
}
时间复杂度
很容易看出二分查找的时间复杂度为O(logn)