目錄
搜尋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。與上面例題不同的地方在於s按公升序排列,適合用二分搜尋。輸入:第一行輸入n,第二行輸入s(按公升序排列),第三行輸入q,第四行輸入t。
輸出:一行輸出c。
完整答案:
#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...