查詢-二分查詢、三分查詢
阿新 • • 發佈:2018-12-15
二分查詢的查詢過程是:
每輪與有序區間的中間元素進行比較,若相等則返回當前元素位置。若被查詢元素大於中間元素,則到右側區間查詢,若查詢元素小於中間元素,則到左側區間查詢。
不斷重複前序查詢過程,或者待查詢區間失效。
輸入:表的長度,表中各個元素。要查詢的表元素。
輸出:要查詢的表元素的位置(1<=pos<=length(ST)).
執行結果:
演算法實現:
int Sercah_Bin(SSTable ST,KeyType key){ /*折半查詢 只要low<=high則比較中間元素 如果比中間元素小則 high=mid-1;若比中間元素大則低邊界則low=mid+1*/ int low=1,high=ST.length,mid; while(low<=high){ mid=(low+high)/2; if(key==ST.elem[mid]) return mid; else if(key>ST.elem[mid]) low=mid+1; else high=mid-1; } return 0; }
演算法複雜度:O(logN).
三分查詢:
如果遇到凸函式或者凹函式,已知L,R為左右極值橫座標。不斷縮小L,R的範圍,無限接近極值,先取L、R的中點mid,然後取mid、R的中點midmid,通過比較f(mid)與f(midmid)的大小來縮小範圍。如果是凸函式,f(mid) > f(midmid),則R= midmid. 反之,L=mid。