#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;
}