二分查找是在有序的表中查找一个元素是否存在,时间复杂度为对数级别,在很多题目中都有它的变体,来复习一下它的递归版本实现和非递归版本。
代码以及测试函数:
#include <iostream>
using namespace std;
// 非递归版本
int BinaryNorRec(int array[], int size, int key)
{
int mid = -1;
int left = 0;
int right = size - 1;
while (left <= right)
{
mid = (left + right) / 2;
if (array[mid] == key)
{
return mid;
}
else if (array[mid] < key)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
if (left > right)
return -1;
}
// 非递归
int BinaryRec(int arr[], int left, int right, int key)
{
int mid = -1;
if (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] == key)
return mid;
else if (arr[mid] < key)
return BinaryRec(arr, mid + 1, right, key);
else
return BinaryRec(arr,