// 二分法查找
#include <iostream>
using namespace std;
int main()
{
const int N = 10;
int i, iIndex;
bool isFound =false;
int a[N] = {-60, -57,-9, 1, 3, 8, 10, 19, 20, 120};
cout<< "Serial:\n";
for ( i = 0; i< N; i++ )
{
cout.width(5);
cout << i;
}
cout<< endl;
cout<< "Data:\n";
for ( i = 0; i< N; i++ )
{
cout.width(5);
cout <<a[i];
}
cout<< endl;
int SearchObj;
cout<< "Which object will be search?";
cin>> SearchObj;
int Head = 0, Tail = N,Middle = (Tail-Head)/2;;
int iFoundCount =0;
while ( !isFound&& iFoundCount <N)
{
if ( SearchObj > a[Middle])
{
Head =Middle;
Middle =Head + (Tail-Head)/2;
}
else
{
if (SearchObj < a[Middle] )
{
Tail = Middle;
Middle = Tail -(Tail-Head)/2;
}
else
{
isFound = true;
iIndex = Middle;
}
}
iFoundCount++;
}
if ( isFound )
{
cout << "Foundobject index is: " << iIndex<< endl;
}
else
{
cout << "Cannotfind!" << endl;
}
cout<< "Search times:"<< iFoundCount;
return 0;
}
// 百度里可以搜到很多种,都是有问题的,本算法本经人亲自测试验证无误。