目錄
二分查找算法是查找算法裏面非常簡單的一個,這裏給出二分查找算法的遞歸和非遞歸的代碼。
注意:二分查找算法的前提是序列有序。
非遞歸
//假設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)