#include <iostream>
using namespace std;
int binarySearch1(int a[], int n, int x) //[l, u)区间
{
int l, u, m;
l = 0; //左区间闭合
u = n; //右区间开放
while(l < u) //用<做判断,不用<=
{
m = l + ( (u-l) >> 1); //防止加法(l + u)溢出,不能写成 m = (l + u) / 2;
if(x < a[m])
u = m; //因为右区间是开放的,所以右边不用-1
else if(x == a[m])
return m;
else
l = m + 1;
}
return -1;
}
int binarySearch2(int a[], int n, int x) //[l, u]区间
{
int l, u, m;
l = 0; //左区间闭合
u = n - 1; //右区间闭合
while(l <= u) //用<=做判断,不用<
{
m = l + ( (u-l) >> 1); //防止加法(l + u)溢出,不能写成 m = (l + u) / 2;
if(x < a[m])
u = m - 1; //因为右区间是闭合的,所以右边要-1
else if(x == a[m])
return m;
else
l = m + 1;
}
return -1;
}
int main()
{
int a[5] = {1, 2, 7, 4, 3};
cout << binarySearch1(a, 5, 7) << " " << binarySearch2(a, 5, 7) << endl;
getchar();
return 0;
}