分治求最大最小

var x:array[1..1000]of integer;
    i,n,maxx,minn:integer;


procedure pd(r1, r2:integer;
var maxx,minn:integer);
  var max1,min1,max2,min2,d:integer;
begin
  if(r1=r2) then
   begin
    maxx:=x[r1];
    minn:=x[r1];
   end
    else if(r2=r1+1) then
    begin
     if(x[r2]>x[r1]) then
      begin
       maxx:=x[r2];minn:=x[r1];
      end
        else
        begin
         maxx:=x[r1];minn:=x[r2];
        end
   end
    else
     begin
      d:=(r1+r2) div 2;
      pd(r1,d,max1,min1);
      pd(d+1,r2,max2,min2);
      if (max1>max2) then maxx:=max1
      else maxx:=max2;
      if (min1<min2) then minn:=min1
      else minn:=min2;
     end;
end;
begin
 //assign(input,'input.txt');
 //reset(input);
 read(n);
 for i:=1 to n do read(x[i]);
 //assign(output,'output.txt');
 //rewrite(output);
 i:=1;
 //while not eof do
 //begin
  //read(x[i]);
  //inc(i);
 //end;
 pd(1,n,maxx,minn);
 writeln(maxx,' ',minn);
 //close(input);
 //close(output);
end.
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jing1223639316/article/details/46826699
个人分类: 编程
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭