二分法查找數據

begin 2;en readln

算法思想

當數據量很大適宜採用該方法。採用二分法查找時,數據需是排好序的。
假設數據是按升序排序的,對於給定值x,從序列的中間位置開始比較,如果當前位置值等於x,則查找成功;若x小於當前位置值,則在數列的前半段中查找;若x大於當前位置值則在數列的後半段中繼續查找,直到找到為止。

程式清單

var
a:array[1..20] of integer;
i,j,p,t,w,m,x:integer;
begin
randomize;
for i:=1 to 20 do a[i]:=random(100); 隨機產生20個1-100的整數
for i:=1 to 19 do
for j:=i+1 to 20 do if a[i]>a[j] then begin p:=a[i];a[i]:=a[j];a[j]:=p;end; 選擇法排序
for i:=1 to 20 do begin write('a[',i,']=",a[i]," ');if i mod 5=0 then writeln;end;readln(x); 列印20個隨機數
t:=1; w:=20; 頭指針、尾指針賦值
m:=(t+w) div 2;中指針賦值
repeat
if a[m]>x then begin w:=m-1;m:=(t+w) div 2;end; 如果a[m]>x 則尾指針賦值為中指針-1
if a[m]<x then begin t:=m+1;m:=(t+w) div 2;end; 如果a[m]<x 則頭指針賦值為中指針+1
until (a[m]=x) or (t>w); 在找到x或頭指針大於尾指針(未找到)時退出循環
if a[m]=x then writeln('find! place:',m:3) else writeln('cannot find!');
readln;
end.

相關詞條

熱門詞條

聯絡我們