算法分析题2-3
设a[0:n-1]是已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
#include <iostream>
using namespace std;
class Point{
public:
int i;
int j;
Point()
{
i=0;
j=0;
}
};
int find(double *a, int head, int end, double x, Point &pt)
{
int mid;
while(head<=end)
{
mid=(head+end)/2;
if(x==a[mid]){
pt.i=mid;
pt.j=mid;
return 1;
}
if(x>a[mid])
head=mid+1;
else
end=mid-1;
}
pt.i=end;
pt.j=head;
return 0;
}
int main()
{
const size_t n = 100;
double a[n];
int flag;
int x;
Point pt;
for(size_t ix=0; ix!=n; ++ix)
a[ix]=ix;
x=6;
flag=find(a,0,99,x,pt);
if(flag){
cout<<"找到了!"<<endl;
}
else{
cout<<"没找到!"<<endl;
}
cout<<"i="<<pt.i<<endl;
cout<<"j="<<pt.j<<endl;
return 0;
}