二分搜索優解
二分搜索(對半分)和斐波那契搜索(黃金分割)時間複雜度(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