今天要學習的是二分查詢。
1.介紹
二分查詢跟歸併與快排一樣都採用了分治思想,它是在乙個有序陣列中查詢資料。
2.方法
將乙個陣列的下標除以2,得到的是中間數,中間數與要查詢的資料進行對比(注意這裡是有序陣列),如果要查詢的資料比中間數大就在中間數的右邊,如果小就在左邊。一直迴圈,直到找到要查詢的資料或者陣列查完。
3.下面看圖
在圖中,我要查詢的是44,起初m是4,left是0,right是9
第一次:m所對應的資料小於查詢的資料,那我就在右邊找,這時候left是5,right不變,m是7
第二次:m所對應的資料大於查詢的資料,在左邊找,這個時候left還是5,right就變成了6,m是5
第三次:m所對應的資料小於查詢的資料,那我就在右邊找,這時候left是6,right不變,m是6,這個時候整個陣列也只剩下最後乙個了
第四次:m等於查詢的資料,查詢結束,返回下標
4.**區
#include
#include
//二分查詢
intbinarysearch
(int
* a,
int len,
int finddataname)
else
//如果查詢的資料小於中間數,就在中間數的左邊找
}return-1
;}intmain()
這是最後的列印結果
這下標所對應的資料正好是44
下面的是遞迴寫法。
//遞迴型二分查詢
intbinarysearch2
(int
* a,
int left,
int right,
int finddataname)
```
5.總結二分查詢屬於經典的查詢演算法,重點還是要學習他的思想,對鍛鍊邏輯思維還是有很大幫助的。 《演算法》 第三章 查詢
在第三章裡面,並不是一開始就講的查詢,第一節中首先介紹的是符號表。符號表,其實就是儲存了鍵值對的一種資料結構,鍵值對用於將乙個鍵和乙個值聯絡起來。符號表支援兩種操作 插入 put 即將一組新的鍵值對存入表中 查詢 get 即根據給定的鍵得到對應的值。下面看一下書中關於符號表的應用以及api 書中對於...
第三章 聯接查詢 2
1 1 建立輔助表dbo.nums set nocount on use tsqlfundamentals2008 goif object id dbo.nums u is not null drop table dbo.nums create table dbo.nums n int not nu...
第二章 第三章
列舉和 define巨集的區別 define巨集常量是在預編譯階段進行簡單替換,列舉常量則是在編譯的時候確定其值。一般在編譯器裡,可以除錯列舉常量,但是不能除錯巨集常量。列舉可以一次定義大量相關的常量,而 define巨集一次只能定義乙個。聯合體 unionperdata 定義了乙個名為perdat...