有時候我們用二分查詢法找的不是乙個元素而是一段區域。這時候我們就可以設計floor(地板)
和ceil(天花板)
函式,找到相應區域的起始位置和結束位置。
對所給資料進行二分直到l == r
,表示找到比target小的最大元素或比target大的最小元素的位置。具體實現如下:
#include
using
namespace std;
template
<
typename t>
intfloor
(t arr,
int n, t target)
if(l+
1< n && arr[l+1]
== target)
return l+1;
else
return l;
}template
<
typename t>
intceil
(t arr,
int n, t target)
if(r-
1>=
0&& arr[r-1]
== target)
return r-1;
else
return r;
}int
main
(int argc,
char
const
*ar**)
; cout <<
"the floor index is :"
<<
floor
(arr,10,
5)<< endl;
cout <<
"the ceil index is :"
<<
ceil
(arr,10,
5)<< endl;
return0;
}
執行結果:
the floor index is :
4the ceil index is :
6
順序查詢法和二分查詢法
方法1 def shunxu f list,temp for index,i in enumerate f list if i temp return index return none方法2 def shunxu f flist,temp for i in range len f flist if...
二分查詢法
二分查詢要求 1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列。優缺點 折半查詢法的優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。演算法思想 首先,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者...
二分查詢法
有序陣列中的find 方法 public int find long serchkey int lowerbound 0 int upperbound nelems 1 while true curin lowerbound upperbound 2 if a curin serchkey retu...