/*
任务一:北大版 在一个非降序列中,查找与给定值相同的元素下标
写一个 Binarysearch在包含size个元素的、从小到大排序的int数组a里查找元素p,
如果找到,返回元素下标,如果找不到,返回-1.
*/
#include <iostream>
using namespace std;
int Binarysearch(int a[],int size,int p) {
int L=0;
int R=size-1;
while(L<=R) {//如果区间不为空就继续查找
int mid=L+(R-L)/2;//取查找区间正中元素的下标
//cout<<L<<" "<<mid<<" "<<R<<endl;
if(p==a[mid]) return mid;
else if(p>a[mid]) L=mid+1;//设置新的查找区间的左端点
else R=mid-1;//设置新的查找区间的右端点
}
return -1;
}
int main() {
int a[20]= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
int mid;
cout<<Binarysearch(a,20,18)<<endl;//第一个参数 指向数组头的指针 第二个参数 数组大小 第三个参数 要查找的值
return 0;
}
/*
任务2:北大版 写一个函数 LowerBound,在包含size个元素的从小到大排序int数组a里查找比给定整数p小的,下标最大元素。找到则返回其下标 找不到返回-1
思考查找比给定整数p大的,下标最小元素,怎么改?
*/
#include <iostream>
using namespace std;
int LowerBound(int