前言::沒有對比就沒有差距,看了時間的複雜度才第一次真正感受到二分的速度。
,從順序表的一端開始,依次將每個元素的關鍵字同給定值k進行比較,若某個元素的關鍵字等於k,則表明查詢成功,返回該元素下標,若所有元素都比較完畢仍找不到,則表明查詢失敗,返回特定值,常用-1.
優點:最簡單,對元素排列次序無要求,插入新元素方便。
缺點:速度慢,平均查詢長度為(n+1)/2,約為表長度一半。
提高效率的方法:按查詢概率從大到小排列。事先未知概率的情況下,每次查詢到乙個元素時,將它與前驅元素對調位置,這樣,查詢頻度高的元素就會逐漸前移。
**::
int search (int a,int v,int begin,int end)
。作為二分查詢物件的資料表必須是順序儲存的有序表。
二分查詢的過程:有序表a[0]~a[n-1],首先取中點元素a[mid]的關鍵字同給定值k進行比較,若相等則查詢成功;否則,若k< a[mid].key,則在左子表中繼續進行二分查詢;若k> a[mid].key,則在右子表中繼續進行二分查詢;這樣,經過一次比較,就縮小一半查詢空間,如此進行下去,直到查詢成功,或者當前查詢區間為空時為止(或區間的下界大於等於上界時為止)。
二分查詢的過程是遞迴的,也很容易寫成非遞迴演算法,只需要根據情況修改待查詢區域的上下界即可。
二分查詢過程可用一棵二叉樹來描述,樹中的每個根結點對應當前查詢區間的中點元素,它的左子樹和右子樹分別對應該區間的左子表和右子表,通常把此樹稱為二分查詢的判定樹。由於二分查詢在有序表上進行,所以其對應的判定樹是一棵二叉搜尋樹(排序樹)。
在有序表上二分查詢乙個關鍵字等於k的元素時,對應著判定樹中從根結點到待查結點的一條路徑,同關鍵字進行比較的次數就等於該路徑上的結點數,或者說等於待查結點的層數。
優點:時間複雜度為o(logn),查詢速度快。
**::
int search (int a,int v,int begin,int end)
{while(end>=begin)
{int m = (begin+end)/2;//中間值
if(v== a[m]) return m;
if(v
搜尋1 線性搜尋和二分搜尋
目錄 搜尋1線性搜尋 示例 二分搜尋 示例 總結搜尋 就是在資料集合中尋找給定的關鍵字的位置或判斷其有無。基本的搜尋演算法有如下三種,分別為線性搜尋,二分搜尋,雜湊法。下面我們先學習前兩者。線性搜尋就是從頭順次訪問各元素,檢查該元素是否與目標值相等。線性搜尋的演算法效率很低,但是用於各種形式的資料。...
897 遞增順序搜尋樹
給你一棵二叉搜尋樹,請你 按中序遍歷 將其重新排列為一棵遞增順序搜尋樹,使樹中最左邊的節點成為樹的根節點,並且每個節點沒有左子節點,只有乙個右子節點。class solution treenode left solve root.left treenode right solve root.righ...
三 搜尋和二分 Cloned Q 搜尋
原題 在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。題意 中文題題意就很明顯了 題解 類似於八皇后問題,按照行來放,所以行不會衝突,要處理的就...