ListSet 對半搜尋的遞迴演算法

2021-12-29 22:49:24 字數 1320 閱讀 9364

對半搜尋是一種二分搜尋, 將表劃分為長度幾乎相等的兩個子表.

共有函式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 ...