正确的二分法数据查找算法,百度百科里有一个算法,很多人都在研究,但是我跑过之后结果是错的,有问题,此算法经本人验证无误,贴出来与大家共享。
//dichotomy algorithm
#include <iostream>
using namespace std;
const int NUM = 16;
const int Found(const int a[], const int obj, const intlen);
int main()
{
int a[NUM]={-1,11,23,56,98,129,189,452,654,789,1023,2892,5022,6344,7680,9988};
int isFound = NUM;
for (int i = 0; i < NUM; i++)
{
cout << "a["<< i <<"]=" << a[i]<< "\t";
if ((i+1)%3 == 0)
cout<< '\n';
}
cout<< endl;
isFound =Found(a,56,NUM);
if (isFound == NUM)
cout << "Data not found.\n";
else
cout << "Data is a[" << isFound << "]" << endl;
return 0;
}
const int Found(const int a[], const int obj, const intlen)
{
int front = 0, end =len-1, i=(front+end)/2;
while ( front < end )
{
if (a[i] == obj)
returni;
else
if (a[i] < obj)
{
front = i;
}
else
{
end = i;
}
i = (end+front)/2;
}
return len;
}