搜尋1 線性搜尋和二分搜尋

2021-10-20 10:33:53 字數 2008 閱讀 9098

目錄

搜尋1線性搜尋 示例

二分搜尋 示例

總結

搜尋:就是在資料集合中尋找給定的關鍵字的位置或判斷其有無。

基本的搜尋演算法有如下三種,分別為線性搜尋,二分搜尋,雜湊法。

下面我們先學習前兩者。

線性搜尋就是從頭順次訪問各元素,檢查該元素是否與目標值相等。

線性搜尋的演算法效率很低,但是用於各種形式的資料。

普通的線性搜尋:

int linesearch() 

}

新增標記的線性搜尋:

int linesearch()
向線性搜尋中新增標記,可以將演算法的效率提高常數倍。

標記:就是在陣列等資料結構中設定乙個擁有特殊值的元素,來達到簡化迴圈控制等諸多目的。

示例:出入包含n各整數的數列s以及包含q個整數的數列t,輸出s和t中相同證書的個數c。

輸入:第一行輸入n,第二行輸入s,第三行輸入q,第四行輸入t。

輸出:一行輸出c。

完整答案

#includeint a[100], key, n;

int linesearch(int a,int n,int key)

int main()

scanf("%d", &q);

for (i = 0; i < q; i++)

printf("%d", sum);

return 0;

}

假設有乙個包含n個元素的陣列a,我們運用二分搜尋在其中尋找key,其關鍵的**如下:

int binarysearch(int a,int key) 

return 0;

}

在使用二分搜尋時,要保證資料按公升序排列(或者排序之後再使用二分搜尋)。left指向搜尋範圍開頭的元素,right指向末尾元素的後一位。

示例:出入包含n各整數的數列s以及包含q個整數的數列t,輸出s和t中相同證書的個數c。

輸入:第一行輸入n,第二行輸入s(按公升序排列),第三行輸入q,第四行輸入t。

輸出:一行輸出c。

與上面例題不同的地方在於s按公升序排列,適合用二分搜尋。

完整答案

#includeint n;

int binarysearch(int a,int key)

return 0;

}int main()

scanf("%d", &q);

for (i = 0; i < q; i++)

printf("%d", sum);

return 0;

}

對含有n個元素的陣列執行線性搜尋和二分搜尋時,最壞的情況下的比較運算的次數分別如下表示:

元素數線性搜尋二分搜尋

100100

710000

10000

14100000

100000

20線性搜尋最壞的情況下要比較n次,而二分搜尋大概需要高等排序演算法

讀《挑戰程式設計競賽》第八天 (侵刪)2021.2.26

( 2021.7.8 第一次修改)

順序搜尋和二分搜尋

前言 沒有對比就沒有差距,看了時間的複雜度才第一次真正感受到二分的速度。從順序表的一端開始,依次將每個元素的關鍵字同給定值k進行比較,若某個元素的關鍵字等於k,則表明查詢成功,返回該元素下標,若所有元素都比較完畢仍找不到,則表明查詢失敗,返回特定值,常用 1.優點 最簡單,對元素排列次序無要求,插入...

三 搜尋和二分 Cloned Q 搜尋

原題 在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。題意 中文題題意就很明顯了 題解 類似於八皇后問題,按照行來放,所以行不會衝突,要處理的就...

刷題 二分搜尋 (1)

模板 找出最左邊的乙個,最右邊的乙個,和長度 注意找左位置時要判斷 1 不可以是字串結尾,不然為0或為空 2 不可以不等於key include include include using namespace std intn,m const int n 100003 int d n intmain...