回 帖 发 新 帖 刷新版面

主题:快排啊……

var f1,f2:text;
var a:array[0..10000] of integer;
var n,i:integer;
procedure swap(var n:integer; var m:integer);
var tmp:integer;
begin
tmp:=n;
n:=m;
m:=tmp;
end;
procedure qsort(l,r:longint);
var i,j,x:integer;
begin
i:=l;
j:=r;
x:=a[(l+r)div 2];
repeat
while a[i]<x do inc(i);
while a[j]>x do dec(j);
if i<=j then
begin
swap(a[i],a[j]);
inc(i);
dec(j);
end;
until i>j;
if l<j then qsort(l,j);
if i<r then qsort(i,r);
end;

begin
assign(f1,'jinru.in');
reset(f1);
read(f1,n);
for i:=1 to n do
read(f1 ,a[i]);
qsort(a[1],a[n]);
close(f1);
assign(f2,'chulai.out');
rewrite(f2);
for i:=1 to n do
write(f2,a[i],' ');
close(f2);
end.
求大家帮我看一下到底有什么错误啊
就是不出结果
就是不出结果……[em52][em52][em52][em52][em52]

回复列表 (共4个回复)

沙发

没仔细看,貌似算法上没有的问题。
出不了结果?麻烦具体说明一下是怎么个不出结果。

个人建议:
首先你看看程序是否读入了输入数据,比方在close(f1)这里设置一个断点(Ctrl+F8)
然后用Debug下的Watch功能去看看输入是否正确。
如果输出到文件出不了结果,先试试输出到屏幕,看看有没有输出。
另外就是编译时最好把目录设定在本程序所在的目录,否则可能输出到别的目录下去了。

板凳

应该是procedure上不能用全局变量。(不用 var)

3 楼

o,不对,我知道了。是调用上出问题。是qsort(1,n)

4 楼

我是这样写的
program p1;
var n,k:integer;
    a:array[1..100] of integer;
procedure work(x,y:integer);
  var i,j,t:integer;
  begin
    if x<y then
    begin
      i:=x;
      j:=y;
      t:=a[i];
      while i<j do
      begin
        while (a[j]>t) and (i<j) do j:=j-1;
        if i<j then begin a[i]:=a[j];i:=i+1;end;
        while (a[i]<t) and (i<j) do i:=i+1;
        if i<j then begin a[j]:=a[i];j:=j-1;end;
      end;
      a[i]:=t;
      work(x,i-1);
      work(i+1,y);
    end;
  end;

begin
  readln(n);
  randomize;
  for k:=1 to n do
  begin
    a[k]:=trunc(random*100);
    write(a[k]:4);
  end;
  writeln;
  work(1,n);
  for k:=1 to n do write(a[k]:4);
  writeln;
end.

我来回复

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