C語言中的二分查詢(折半查詢) vs2013

2021-10-24 21:40:29 字數 1395 閱讀 3514

二分查詢也稱折半查詢(binary search),它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。如果要查詢的元素在表中,那麼返回它,如果元素不在表中,返回null。

為什麼說二分查詢是一種效率較高的查詢方法呢?

首先我們來看看順序查詢,舉個例子,

比如我們有:

3,6,9,11,12,15,19,20,22,

這九個數字。

我隨便選擇其中的乙個數字,假設是11,我們要從這九個數字中找到11。如果找到的數字是11,那就找到了,如果這九個數中沒有11,那就找不到。

假設從第乙個開始找,

第一次:3,不對

第二次:6,不對

第三次:9,不對

第四次:11,找到了!

這就是順序查詢,每次尋找只能排除乙個數字,現在我們要找的是11,只要四次,可是如果我們要找的是25,就要九次了,如果數字的個數更多那就要花費更多次數。

那麼效率較高的二分查詢是怎樣的呢?

假設我們要找的數字仍然是11,

第一次:我們取這九個數字的中間的數字:12。11<12,小了,那麼我們就能排除12右邊的部分。

第二次:我們取12左邊部分的中間的數字:9。11>9,大了,那麼我們就能排除9左邊的部分。

第三次:我們取9右邊部分的中間數字:11。11=11,找到了。

這樣的方式要比上面的順序查詢快得多,可能在這個例子中只有一次的差別,可當數字多了呢?那二分查詢的速度就要快的多了,這就是二分查詢。

下面來看看二分查詢在c語言中的運用,這裡我使用的是vs2013。

#include

intmain()

;//tofind表示要找的數字

int tofind =7;

//陣列最左邊元素的下標

int left =0;

//陣列最右邊元素的下標

int right =

sizeof

(arr)

/sizeof

(arr[0]

)-1;

//sizeof(arr)是計算arr的位元組

//sizeof(arr[0])是計算陣列中第乙個的位元組

//兩者相除就是陣列長度

while

(left <= right)

else

if(tofind < arr[mid]

)else}if

(left>right)

system

("pause");

return0;

}

C語言中的二分查詢(折半查詢)

為了提高查詢效率,在乙個陣列中查詢某個資料是否存在時,可以先將陣列資料排序,將排序後的數列 的中點設定為比較的物件,如果要找的元素的值 小於該中點元素,則將待查序列縮小為左半部分,否則為右半部分。即根據比較的結果排除掉陣列一半的元素,再在餘下的一半陣列元素中取中間的乙個元素進行比較,並根據比較的結果...

C語言折半查詢(二分查詢)

定義 對使用者輸入的數是否在已經按順序定義好的一組數上進行查詢 思想 定義好的一組數必須按順序排序,一般從小到大排序 將一組數分為兩個部分 low指第乙個數,mid指中間乙個數,high指第最後乙個數 把查詢數n與mid比較 如果n mid,說明在mid右側,low的位置發生改變,除去當時low本身...

c語言 二分查詢(折半查詢)

a 你的新鞋子好炫酷,多少錢買的呀?b 在100 300之間,你猜一下咯,每次我只告訴你猜大了還是猜小了,直到你猜對為止,看看你能不能很快猜出來。a 小夥伴在生活中有沒有和好朋友玩過類似的遊戲呢,不知道接下來你會選擇何種方式去猜呢?如果從100開始乙個乙個往後試,就顯得稍稍有點無腦了,每次猜測的時候...