折半查詢法的遞迴和非遞迴形式
1、折半查詢的查詢過程是:先確定待查記錄所在區間,然後逐步縮小範圍至到找到或者找不到該記錄為止。
2、折半查詢的效能分析可以由判定樹得出,折半查詢在查詢成功時給定值進行比較的關鍵字個數至多為⌊log_2 ⌋
*/
//折半查詢法的非遞迴形式
int Search_Bin ( SSTable ST, KeyType kval ) {
low = 1; high = ST.length; // 置區間初值
while (low <= high) {
mid = (low + high) / 2;
if ( kval == ST.elem[mid].key )
return mid; // 找到待查元素
else if ( kval < ST.elem[mid].key) )
high = mid - 1; // 繼續在前半區間進行查詢
else low = mid + 1; // 繼續在後半區間進行查詢
}
return 0;
}
//折半查詢法的遞迴形式
int b_search(int elem[], int low, int high, int kval)
//在陣列elem的下標範圍為low~high(low>0)中查詢kval,若查不到則返回0.
{
int mid;
if(low>high)
return -1;
else{
mid = (low+high) / 2;
if(elem[mid]==kval)
return mid;
if(kval>elem[mid])
return b_search(elem,mid+1,high,kval); /*在序列的後半部分查詢*/
else
return b_search(elem,low,mid-1,kval); /*在序列的前半部分查詢*/
}
}