词条 | 二分法查找数据 |
释义 | 算法思想当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。 假设数据是按升序排序的,对于给定值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. |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。