回 帖 发 新 帖 刷新版面

主题:[讨论]请教一下 什么叫“二分法”?

请教一下 什么叫“二分法”?
请各位回答后并编出具体程序。谢谢[em4]

回复列表 (共8个回复)

沙发

比如你在一百个有序数里面找一个数,你就现在第50个数比那个数大么?大就下一次再50-100里面找,小就在1-50,然后25。。。。。。。

板凳

我还要程序

3 楼

Program SortForm;
Type Num=Array[1..100]of integer;

Procedure Sort(N:Num;S,L,R:integer);
Begin
  if L>R then begin writeln('Haven't found!');halt;end;
  if S=N[(L+R)div 2] then begin writeln('Have found!');halt;end
    else if S<N[(L+R)div 2] then Sort(N,S,L,(L+R)div 2-1)
                            else Sort(N,S,(L+R)div 2+1,R);
End;

Var S,i:integer;N:Num;
Begin
  readln(S);{查找的数}
  for i:=1 to 100 do read(N[i]);
  Sort(N,S,1,100);{递归查找}
End.

应该就是这样了

4 楼


procedure sort(var n:num;var s,l,r:integer);

5 楼

什么啊??

6 楼

  ?

7 楼

[quote]
procedure&nbsp;sort([u]var[/u]&nbsp;n:num;[u]var[/u]&nbsp;s,l,r:integer);[/quote]


这边不需要用var啊!
[em13]

8 楼

二分法就是一种很高效的算法。
比如就是查找,就有二分查找……
总之我也说不清楚了,你自己看程序吧。
顺序表的二分查找:
在顺序表(2,5,7,10,14,15,18,23,35,41,52)中,用二分法查找12,所需的关键码比较的次数为4。
program binarysearch;
const n=20
type arr=array[1..n] of integer;
var a:arr;first,last,I,x:integer;
procedure search(x,top,bot:integer);
var mid:integer;
begin
   if top<= bot then
         begin
         mid:=(top+bot)div 2;
         if x=a[mid] then writeln(mid) {递归终止返回}
                 else if x<a[mid] then search(x,top,mid-1)  {递归调用}
 else search(x,mid+1,bot)   {递归调用}
         end;
     else   writeln(‘no’);{递归终止返回}
 end;
begin
   for I=1 to 20 do read(a[I]);read(x);first:=1;last:=n;search(x,first,last)
end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册