#include <iostream>
using namespace std;
#include <assert.h>
//[]边界
//[)
int Binsearch(int *arr, int len,int key)
{
assert(arr);
int begin = 0;
int end = len-1; // len
int mid;
while (begin <= end) // <
{
//mid = (begin + end) / 2; 溢出
mid = begin + ((end - begin) >> 1); //注意操作符的优先级
if (arr[mid] < key)
{
begin = mid + 1; //两个下标相邻 加不上
}
else if (arr[mid] > key)
{
end = mid - 1; //-1 开区间
}
else
return mid;
}
return -1;
}
//递归
int BinsearchR(int *arr, int begin, int end, int key) //问清楚
{
assert(arr);
if (begin > end)
return -1;
int mid = begin + ((end - begin) >> 1); //优先级
if (arr[mid] == key)
return mid;
else if (arr[mid] > key)
BinsearchR(arr, begin, mid-1, key);
else if (arr[mid] < key)
BinsearchR(arr, mid + 1, end, key);
}
int main()
{
int arr[] = { 2,5,8,9,74,87,96 };
int len = sizeof(arr) / sizeof(int);
cout << BinsearchR(arr,0, len, 2) << endl;
cout << BinsearchR(arr,0, len, 96) << endl;
cout << BinsearchR(arr,0, len, 9) << endl;
cout << BinsearchR(arr,0, len, 74) << endl;
return 0;
}
二分查找递归非递归
最新推荐文章于 2022-10-13 17:23:02 发布