靜態查找與動態查找定義?
靜態查找定義了:。
靜態搜索是我們通常概念中的搜索,它是一個"真實搜索"。
靜態搜索之所以是真正的搜索,是因為在靜態搜索的過程中,只有"搜索和搜索被執行,即:
(1)檢查特定關鍵字是否在表中(判斷搜索);
(2)檢索特定關鍵字數據元素的各種屬性(檢索搜索)。
這兩個操作只獲取現有表中的數據信息,而不對表的數據元素和結構進行任何更改,這稱為靜態查找。
常見的靜態查找(表):順序查找、二分法查找、索引順序查找(塊查找)、斐波那契查找等。
動態搜索定義:
動態查找更像是一個"創建、擴展、修改和刪除"一張桌子。
在動態查找的過程中,表上還會有兩個操作:
(1)首先,有一個"判斷性搜索和搜索。如果表中不存在某個特定的關鍵字,它會按照一定的規則插入到表中;
(2)如果已經存在,可以刪除。
雖然動態查找的過程只是添加"插入"和"刪除"操作,在特定的表上執行這兩個操作通常不是那么簡單。
常見的動態搜索:各種樹(二叉查找樹,AVL,B/B樹,紅黑樹等。)和哈希表。
關于數據結構二分法查找成功的平均查找長度和失敗的查找長度?
做這類題目的時候要畫二叉樹。然后補葉子。葉子的高度是搜索失敗的次數。然后總和除以葉子數就是失敗的平均搜索長度。非葉節點是成功的,高度就是搜索成功的次數,然后除以非葉節點的次數就是成功的平均長度。對于11個節點,二叉樹的搜索成功長度為(1x2x3x4x4)/1133/11,搜索失敗長度為(4x83x4)/(84)44/12。
最早的二分查找代碼什么時候出來的?
推薦答案的代碼有問題,不考慮要搜索的數字下標為0怎么辦?因此,如果序列表中沒有要檢查的元素,則應該返回-1。
另外,主函數的最后兩行調用了兩次查找函數,所以代碼不夠簡潔。
建議閱讀:
#inclusiveltstdio.HGT#inclusiveltstdlib.HGTintsearch(int*a,intkey){//在序列表中找到key對半的數據元素。如果找到,函數值是intlow0,mid//這個元素的數組下標;否則為0。inthigh14while(lowlthigh){mid(lowhigh)/2if(keya[mid])returnmid//找到要搜索的元素elseif(keylta[mid])highmid-1//繼續搜索elselowmid1//后半部分繼續搜索}return-1//序列表中沒有要搜索的元素}Voidmain(){int*a,key,iintb[15]{0}abprintf(請輸入15個從小到大的整數:
)for(i1ilt15i){scanf(%d