#include<iostream>
#include<Eigen/Dense>
#include<map>
#include<vector>
using namespace std;
using namespace Eigen;
int main()
{
int a[7] = { 1,2,3,4,9,10,11 };
int lo = 0, hi = 8;
int e = 2;
while (1 < hi - lo)
{
int mi = (lo + hi) / 2;
(e < a[mi]) ? hi = mi : lo = mi;
}
cout << lo << endl;
}
版本C最开始查找的是e右边一个元素的位置,然后-1得到e的位置。
和版本B相比,相当于最终查找的是lo+1,所以结束条件由1<hi - lo改为1 < hi - (lo + 1),即lo < hi
#include<iostream>
#include<Eigen/Dense>
using namespace std;
using namespace Eigen;
int main()
{
int a[7] = { 1,2,3,4,9,10,11 };
int lo = 0, hi = 8;
int e = 2;
while (lo < hi)
{
int mi = (lo + hi) / 2;
(e < a[mi]) ? hi = mi : lo = mi + 1;
}
cout << --lo << endl;
}