快排:pascal 急!

来源:百度知道 编辑:UC知道 时间:2024/06/08 19:35:22
给定长度为n(1<=n<=100000)的数据序列,将其排成从小大的数据序列,并输出每个数据的原始输入顺序,每行输出10对,每对之间用4个空格隔开,每对中间用1个空格隔开。例如:
输入:5
1 3 2 7 6
输出:1 1
2 3
3 2
6 5
7 4
一定用快速排序 输出应为:1 1 2 3 3 2 6 5 7 4

var n,i:longint;
ds,v:array[0..100000]of longint;
procedure swap(a,b:longint);var t:longint;begin
t:=v[a];v[a]:=v[b];v[b]:=t;
end;
procedure quicksort(l,r:longint);
var i,j,k,t:longint;
begin
if l>=r then exit;
i:=l;j:=r;
k:=trunc(random*(j-i))+i;
swap(i,k);
while i<j do begin
while ds[v[j]]>ds[v[i]] do dec(j);
if j=i then break;
swap(i,j);
while ds[v[i]]<ds[v[j]] do inc(i);
if i=j then break;
swap(i,j);
end;
quicksort(l,i-1);
quicksort(j+1,r);
end;
begin
{
自己打开文件,打开到 input
}
randomize;{随机快排}
read(n);
for i:=1 to n do begin
read(ds[i]);
v[i]:=i;
end;
quicksort(1,n);
for i:=1 to n do writeln(ds[v[i]],' ',v[i]);
end.
应该没错
我是按照
输入:5
1 3 2 7 6
输出:1 1
2 3
3 2
6 5
7 4
来编的。