双关键字快速排序

快排双关键字

 1 var
 2 i,j,l,m,n:longint;
 3 a,b:array[0..10000]of longint;
 4 procedure px(l,r:longint);
 5  var
 6  i,j,k,m,x,y:longint;
 7  begin
 8   i:=l;
 9   j:=r;
10   x:=a[(i+j) div 2];
11   y:=b[(i+j) div 2];
12  repeat
13   while (a[i]<x)or((a[i]=x)and(b[i]<y)) do inc(i);
14   while (a[j]>x)or((a[j]=x)and(b[j]>y)) do dec(j);
15   if i<=j then
16   begin
17      k:=a[i];a[i]:=a[j];a[j]:=k;
18      k:=b[i];b[i]:=b[j];b[j]:=k;
19     inc(i);
20     dec(j);
21    end;
22   until i>j;
23   if i<r then px(i,r);
24   if j>l then px(l,j);
25 end;
26  begin
27  readln(n);
28  for i:=1 to n do
29   begin
30    read(a[i]);
31    read(b[i]);
32   end;
33  px(1,n);
34  for i:=1 to n do
35   writeln(a[i],' ',b[i]);
36 end.

 

posted @ 2016-02-05 16:03  ZJQCation  阅读(881)  评论(0编辑  收藏  举报