#include <iostream>
#include <assert.h>
using namespace std;
//二分查找,非递归形式
int binarySearch(int *a, int b, int e, int v)
{
assert(a != NULL);
int *begin = a+b;
int *end = a+e;
int *mid;
//异常处理
if (!a || b >= e)
{
return -1;
}
//折半查找
while (begin < end)
{
mid = begin + ((end - begin) >> 1);
assert(*begin <= *mid && *mid <= *end);
if (*mid > v)
{
end = mid;
}
else if (*mid < v)
{
begin = mid + 1;
}
else
{
return mid - a;
}
}
return -1;
}
//递归实现二分查找
int BinSearch(int Array[],int low,int high,int key/*要找的值*/)
{
assert(Array != NULL);
if (low<=high)
{
int mid = (low+high)>>1;
if(key == Array[mid])
{
return mid;
}
else if(key<Array[mid])
{
return BinSearch(Array,low,mid-1,key);
}
else if(key>Array[mid])
{
return BinSearch(Array,mid+1,high,key);
}
}
else
{
return -1;
}
}
void main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int b = BinSearch(a,0,9,6);
cout << b <<endl;
}
二分查找——递归和非递归
最新推荐文章于 2025-06-06 17:24:06 发布
