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

2021-10-05 04:31:21 字數 1261 閱讀 2959

a:你的新鞋子好炫酷,多少錢買的呀?

b:**在100~300之間,你猜一下咯,每次我只告訴你猜大了還是猜小了,直到你猜對為止,看看你能不能很快猜出來。

a: ……

小夥伴在生活中有沒有和好朋友玩過類似的遊戲呢,不知道接下來你會選擇何種方式去猜呢?

如果從100開始乙個乙個往後試,就顯得稍稍有點無腦了,每次猜測的時候我們可以選擇區間中間的數字,這樣進行下來,我們每一次的猜測就可以排除一半的當前區間,這樣是不是就快了很多呢。類似於這種折半的猜測方式,我們可以把它運用到乙個有序數字串當中去,很快判斷出我們的目標數字是否在其中。今天我們就用c語言**來實現一下這個查詢方法。

我們以arr[10]=和目標值key=6為例

思路**:

**如下:

#include

#include

void

binsearch

(int arr,

int size,

int key)

//因為中間下標已經小於key值了,我們就沒必要再加上它

if(arr[mid]

>key)

//中間值大於key值的時候,說明key值在當前區間左邊

//因為中間下標已經大於key值了,把右邊界放到mid-1位置就行

if(arr[mid]

==key)

}//要是沒找見,迴圈結束的時候,left,right,mid在同乙個位置

//結束位置不等於key,我們就顯示提示資訊

if(arr[mid]

!=key)

}int

main()

;//陣列可以自己scanf

int len=

sizeof

(arr)

/sizeof

(arr[0]

);binsearch

(arr,len,6)

;//這裡的目標數也可以自己scanf

return0;

}

sizeof是計算變數或者型別所佔記憶體大小的關鍵字(返回以位元組為單位的大小),sizeof(arr) (陣列總共的大小)除以 sizeof(arr[0])(陣列中乙個元素的大小)就等於陣列的元素個數。

ps:二分查詢的前提是數字序列必須有序哦!

越努力,越幸福!

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

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

C語言 折半查詢(二分查詢)演算法

什麼是折半查詢 當我們在一堆有序陣列中間查詢乙個數的時候,先將中間的數與查詢數進行比較。如果中間數大於我們要查詢的數,則在中間左半邊進行查詢 同樣的,如果中間數小於我們要查詢的數,則在中間往右半邊再次進行查詢。重複以上的過程,直到滿足,如果不滿足,則查詢失敗。條件 元素必須按照大小有序排列。那我們實...

二分查詢(折半查詢)

二分查詢 折半查詢 從有序序列中找到給出的要查詢的數字。原理是 首先把乙個有序序列中間位置的值與要查詢的數比較,若相等則找到了有序序列中的此數 否則比較兩者的大小,若前者大,則把有序序列的中間位置以前的元素都去掉,餘下的元素組成乙個新的有序數列繼續上一步的操作,直到找到為止 若後者大,則把有序數列中...