二分查找的递归和非递归实现
递归实现:
//时间复杂度:O(logN)
//空间复杂度:O(logN)
int BinSearch(int arr[], int left, int right, int key) //递归实现二分查找
{
if (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] == key)
{
return mid;
}
if (arr[mid] > key)
{
return BinSearch(arr, left, mid - 1, key);
}
if (arr[mid] < key)
{
return BinSearch(arr, mid + 1, right, key);
}
}
return -1;
}
非递归实现:
//时间复杂度:O(logN)
//空间复杂度:O(1)
int BinSearch(int arr[], int SizeOfArr, int key) //非递归实现
{
int left = 0;
int right = SizeOfArr - 1;
int mid = 0;
while (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] == key)
{
return mid;
}
if (arr[mid] > key)
{
right = mid - 1;
}
else if (arr[mid] < key)
{
left = mid + 1;
}
}
return -1;
}