二分查找:注意实在有序数组中进行查找
非递归实现
int BinaryFind1(int arr[],int left,int right,int data)
{
int mid =(left&right)+((left^right)>>1);
while (left <= right)
{
if (arr[mid] == data)
return mid;
else if (arr[mid] > data)
right = mid;
else
left = mid;
mid = left-((left-right) >> 1);
}
return -1;
}
递归实现
int BinaryFind2(int arr[], int left, int right, int data)
{
int mid = left - ((left - right) >> 1);
if (left > right)
return -1;
if (arr[mid] == data)
return mid;
else if (arr[mid] > data)
return BinaryFind2(arr, left, mid, data);
else
return BinaryFind2(arr, mid, right, data);
}
主函数部分
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int right = sizeof(arr) / sizeof(arr[0])-1;
int left = 0;
int find = 10;
int ret=BinaryFind1(arr,left,right,find);
if (ret != -1)
cout << "Find Number!" << endl;
else
cout << "Not Find!" << endl;
ret = BinaryFind2(arr, left, right, find);
if (ret != -1)
cout << "Find Number!" << endl;
else
cout << "Not Find!" << endl;
getchar();
return 0;
}