循环算法实现:
#include <iostream>
using namespace std;
int BinarySearch(int* array, int size, int data)
{
int left = 0;
int right = size-1;
int mid = 0;
while(left <= right)
{
mid = left + ((right - left)>>1);
if(array[mid] == data)
return mid;
else if(array[mid] > data)
right = mid-1;
else
left = mid+1;
}
return -1;
}
void FunTest()
{
int array[10] = {1,2,3,4,5,6,7,8,9,10};
int ret = BinarySearch(array, sizeof(array)/sizeof(array[0]), 7);
cout<<ret<<endl;
}
int main()
{
FunTest();
system("pause");
return 0;
}
递归算法实现:
#include <iostream>
using namespace std;
int BinarySearch(int* array, int left, int right, int data)
{
if(left <= right)
{
int mid = left + ((right - left)>>1);
if(array[mid] == data)
return mid;
else if(array[mid] < data)
return BinarySearch(array, mid+1, right, data);
else
return BinarySearch(array,left, mid-1, data);
}
}
void FunTest()
{
int array[10] = {1,2,3,4,5,6,7,8,9,10};
int ret = BinarySearch(array, 0, (sizeof(array)/sizeof(array[0]))-1, 7);
cout<<ret<<endl;
}
int main()
{
FunTest();
system("pause");
return 0;
}