最近为了换工作,整理知识时编写了这样的一个小程序,即不像普通二分查找算法一样只返回是否能查到,它返回了查找到的位置(未查到返回负数)。另外也使用了模板技术增加通用性。
#include <limits.h>
#include <iostream>
using namespace std;
/* 未查到返回负数,查到了返回在数组中的位置*/
template <typename Type>
int BinSerach(Type array[], int val, int size)
{
if (0 == size)
return LONG_MIN; //最小的32位数(-2147483648).
if (array[size/2] == val)
return size/2;
if (val < array[size/2])
return BinSerach(array, val, size/2);
else
return (size/2 + 1 + BinSerach( array + size/2 + 1, val, size - size/2 -1)); //增加了偏移位置size/2 + 1
}
//for test
void main()
{
int array[] = { 0, 1, 2 , 3, 4, 5, 6, 7, 8, 9};
for (int i = 0; i < 10; ++i)
cout << BinSerach( array, i, 10) << endl;
return;
}