二分搜索优解
二分搜索(对半分)和斐波那契搜索(黄金分割)时间复杂度(1.5logn和1.4logn)差异只是较小的常数倍.
二分搜索还有可以达到O(1*logn)时间复杂度的实现.
代码如下:
template <typename T>
size_t Bin_BetterSearch(vector<T> vec,size_t low,size_t high,T var)
{
while(low<high){
/* mid */
size_t ptr = (high+low)>>1;/* ptr = (high+low)/2 */
(var<vec[ptr])?high=ptr:low=ptr+1;
}
return --low;
}
二分搜索和斐波那契搜链接:https://blog.csdn.net/qq_33904382/article/details/104222514
语义约定:
搜索方法返回不大于目标的最后一个元素的下标,没有查找到则返回 -1
-------------------------
|0|1|2|3|4|5|5|6|7|8|9|
-------------------------
如查找<3>则返回元素<3>的下标,查找<5>则返回第二个<5>的下标
而查找<11>则返回-1