我不知道如何使用 boost 但这是我会使用的:
int binarySearch(int whatToSearch){
//recursive binary search
if value is found
return index
else //not found
return -index-1; //-index+1 will give you the place to insert that element
}
然后,如果它存在,我将在返回的索引之后获得第二个元素。
这是我使用的二进制搜索代码
int mybinary_search(string array[],int first,int last, string search_key){
int index;
if (first > last)
index = -first-1;
else{
int mid = (first + last)/2;
if (search_key == array[mid])
return mid;
else if (search_key < array[mid])
index = mybinary_search(array,first, mid-1, search_key);
else
index = mybinary_search(array, mid+1, last, search_key);
} // end if
return index;
}
double findAskedValue(int value){
double x[] = {10, 12.5, 12.9, 13.7, 50.07};
size_t length = sizeof(x)/sizeof(x[0]);
int index = mybinarySearch(x,0,length, 11);
if(index >= 0)
cout << "value I'm searching for " << x[index+2] << endl;
else
cout << "value I'm searching for " << x[(-index-1)+2] << endl;
//instead of cout's you can do what ever you want using that index
}
一点解释:您将调用 findAskedValue(val) ,它会返回一个值。如果 value > 0,则该元素存在于列表中,并且 index+2 是您要搜索的值的位置,否则 (-index-1) 是插入该元素的位置。-index-1 + 2 将为您提供第二个更大的元素。
其复杂性是O(log(n))