二分法查詢(初學者)

2022-04-01 07:01:47 字數 1289 閱讀 8758

適用情況:在一批有序資料中查詢某數。

基本思想:

1 確定區間[a,b],驗證f(a)·f(b)<0,給定精確度ξ.

2 求區間(a,b)的中點c.

3 計算f(c).

(1) 若f(c)=0,則c就是函式的零點;

(2) 若f(a)·f(c)<0,則令b=c;

(3) 若f(c)·f(b)<0,則令a=c.

(4) 判斷是否達到精確度ξ:即若|a-b|<ξ,則得到零點近似值a(或b),否則重複2-4.

例:假設陣列a中的資料是按由小到大的順序排列的:-12,0,6,16,23,56,80,100,110,115,從鍵盤上輸入乙個數,判定該數是否在該陣列中,若在,輸出所在序號。

(假設輸入的數為80)第一步:設low、mid和high三個變數,分別指向數列中的起始元素,其初始值為low=0,high=9,mid=4,判斷mid指示的數是否為所求。mid指示的數是23,不是要找的80,仍繼續查詢。

第二步:確定新的查詢區間,因為80大於23,所以查詢的範圍可以縮小為23後面的數,新的查詢區間為[56,80,100,110,115],low,mid,high分別指向新區間的開始,中間和最後乙個數。實際上high不變,將low(low=mid+1)指向56,mid(mid=(low+high)/2)指向100,還不是要找的80,仍繼續查詢。

第三步:上一步中,所找數80比mid指示的100小,可知新的查詢區間為[56,80],low不變,mid與high的值作相應修改。mid指示的數為56,還要繼續查詢。

第四步:根據上一步的結果,80大於mid指示的數56,可確定新的查詢區間為[80],此時,low與high都指向80,mid亦指向80,即找到了80,到此為止,查詢過程完成。

注:若在查詢過程中,出現low>high的情況,則說明,序列中沒有該數,亦結束過程。

#include #include

void

main()

,low,mid,high,found,n;

low=0

; high=9

; mid=4

; found=0

; printf(

"input a number to be searched:");

scanf("%d

",&n);

for(;low<=high;mid=(low+high)/2

)

if(n>a[mid])

else

}if(found==1

)

else

}

二分法查詢(初學者)

適用情況 在一批有序資料中查詢某數。基本思想 1 確定區間 a,b 驗證f a f b 0,給定精確度 2 求區間 a,b 的中點c.3 計算f c 1 若f c 0,則c就是函式的零點 2 若f a f c 0,則令b c 3 若f c f b 0,則令a c.4 判斷是否達到精確度 即若 a b...

初學python 二分法查詢

sort 函式用於對原列表進行排序,如果指定引數,則使用比較函式指定的比較函式 list.sort cmp none,key none,reverse false cmp 可選引數,如果指定了該引數會使用該引數的方法進行排序 key 主要是用來進行比較的元素,只有乙個引數,具體的函式的引數就是取自於...

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...