問題
在乙個排好序的陣列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...