(一)非递归写法
<pre name="code" class="cpp">template<class T>
int BinarySearch_NR(T*array, size_t size,T x)
{
assert(array);
size_t left = 0;
size_t right = size - 1;
size_t mid = 0;
while (left <= right)//如果这里给的右开区间一定要加上=号
{
mid = left + (right - left) / 2;
if (x < array[mid])
{
right = mid - 1;
}
else if (x > array[mid])
{
left = mid + 1;
}
else
{
return mid;
}
}
return -1;
}
# include<iostream>
# include<cassert>
using namespace std;
# include"BinarySearch.h"
int main()
{
int array[10] = { 1, 2, 5, 7, 11, 15, 17, 19, 25, 34 };
int index = 0;
//index = BinarySearch_R(array, 0, 0, 1);
index = BinarySearch_NR(array,10, 1);
if (index == -1)
{
cout << "很抱歉没有找到" << endl;
}
else
{
cout << "找到了:" << index << endl;
}
return 0;
}
(二)递归写法
//template<class K>
//int BinarySearch_R(K*array, size_t left, size_t right, K x)
//{
// assert(array);
// if (left == right)
// {
// if (x == array[left])
// {
// return left;
// }
// else
// {
// return -1;
// }
// }
// size_t mid = 0;
// if (left < right)
// {
// mid = left + (right - left) / 2;
// if (x < array[mid])
// {
// right = mid - 1;
// }
// else if (x > array[mid])
// {
// left = mid + 1;
// }
// else
// {
// return mid;
// }
// }
// else
// {
// return -1;
// }
// return BinarySearch_R(array, left, right, x);
//}