1. 程式人生 > >查詢-二分查詢、三分查詢

查詢-二分查詢、三分查詢

二分查詢的查詢過程是:

每輪與有序區間的中間元素進行比較,若相等則返回當前元素位置。若被查詢元素大於中間元素,則到右側區間查詢,若查詢元素小於中間元素,則到左側區間查詢。

不斷重複前序查詢過程,或者待查詢區間失效。

輸入:表的長度,表中各個元素。要查詢的表元素。

輸出:要查詢的表元素的位置(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。