兩種檢索演算法

2021-10-03 22:17:06 字數 888 閱讀 1869

問題

在乙個排好序的陣列t[1…n]中查詢x,如果x在t中,輸出x在t的下標j;如果x不在t中,輸出j=-1;(這裡為了區分與下標0的區別改為了-1)

解析

如何在乙個有序的陣列中查詢出乙個元素,無外就幾種情況,要麼採用順序查詢,要麼採用分治思想逐步排查或者使用雜湊值等進行查詢。

順序查詢沒什麼好解釋的就是從陣列第乙個元素開始遍歷,如果沒有找到要找的就遍歷到最後乙個然後結束。

二分查詢,是基於有序序列的查詢演算法。通過折中的思想查詢元素mid=[left+right]/2。

3.設計

int

binary_search

(int a,

int left,

int right,

int num)

else

if(a[mid]

>num)

else

}return-1

;}intarr_search

(int a,

int len,

int num)

}return-1

;}

4.分析順序查詢是從第乙個一直遍歷至最後乙個複雜度為o(n) ,而二分查詢是o(logn),複雜度要優於順序查詢。

5.原始碼

github位址

兩種洗牌演算法比較

演算法1原理 1.用乙個整型陣列記錄各個位置是否已經放置了數,如果放置了則不為0,否則為0。所以在演算法開始的時候,初始化此陣列每個元素的值都為0.2.每次產生乙個0 53之間的數,看這個位置是否放置了數,如果已經放置了,則繼續採用同樣的方法找乙個隨機的位置進行判斷,如果這個位置還未放置,則設定此位...

兩種迷宮生成演算法

這裡要介紹兩種迷宮生成的演算法,recursive backtracking和eller s algorithm。它們都生成的是perfect maze,也就是說每個區域都連通,並且沒有環的迷宮。我們現在說recursive backtracking 迷宮的初始狀態是牆壁都存在。選擇乙個開始區域。隨...

變位詞 兩種演算法實現

方案一 使用資料結構 map。兄弟單詞共用乙個簽名key,key為單詞內部排序後的詞條,list儲存同一key的單詞集合 相對於程式設計珠璣中的方法,該方法在空間上節省了每個單詞乙個key的空間 在時間上,不再需要二分查詢,o 1 的查詢 但是這種方法還可以優化,見方案二 方案二 使用trie樹。t...