對半搜尋是一種二分搜尋, 將表劃分為長度幾乎相等的兩個子表.
共有函式search()呼叫私有函式bsearch(). 而後遞迴呼叫bsearch()函式實現對有序表的對半搜尋.
mid, left, right均為元素下標, 如果當前表不為空, 則令x與l[mid]比較. 若兩者相等, 則搜尋成功. 若前者小於後者, 則繼續查詢左半部分, 否
則查詢右半部分. 下標範圍分別為[left, mid - 1], [mid + 1, right]. 如果當前搜尋表為空表, 搜尋失敗返回notpresent.
實現**:
#include iostream
#include cstdio
#include cstring
#include algorithm
#include assert.h
using namespace std;
const int maxn = 9999;
enum resultcode
;template
class dynamicset
;template
class listset: public dynamicset
bool isempty() const
bool isfull() const
resultcode search(t &x) const;
resultcode insert(t &x);
resultcode remove(t &x);
void print();
private:
t *l;
int maxsize, n;
int bsearch(t &x, int left, int right) const;
/* data */
};template
void listset::print()
template
listset::listset(int msize)
template
resultcode listset::insert(t &x)
template
resultcode listset::remove(t &x)
template
resultcode listset::search(t &x) const
template
int listset::bsearch(t &x, int left, int right) const
return -1;
}int main(int argc, char const *ar**)
pta oj 遞迴,搜尋的補充
謝謝阪本龍一 總結 看起來越漂亮的 其實越簡潔,反而越容易寫,少了很多坑坑窩窩,要相信一切都是協調的。1.同樣的套路,解決組合數,注意num初始化,注意用printf防止超時 include include include include include includeusing namespace...
遞迴的函式 記憶化搜尋
給定乙個函式 f a,b,c 如果 a 0 或 b 0 或 c 0 返回值為 1 如果 a 20 或 b 20 或 c 20 返回值為 f 20,20,20 如果 a b 並且 b c 返回 f a,b,c 1 f a,b 1,c 1 f a,b 1,c 其它情況返回 f a 1,b,c f a 1...
遞迴搜尋登錄檔的例子
遞迴搜尋登錄檔的例子 using system using microsoft.win32 namespace cleanregistry static void findsymantec registrykey mykey mykey.tostring 獲取所有鍵名 foreach string ...