[GRYZ2015]快排练习

用快排完成n(n<=100)个人年龄的从小到大的排序,要求出生年相同的按月排。

 输入:第一行n个人

         2到n+1行出生  年  月(1992 9)

 输出:年龄的从小到大的排序。

type ss=record
    nian,yue:longint;
    end;

var a:array[1..10000]of ss;
    n,i:longint;

procedure sort(l,r:longint);
var i,j,xn,xy:longint;y:ss;
begin
    i:=l;j:=r;
    xn:=a[(l+r) div 2].nian;
    xy:=a[(l+r) div 2].yue;
    repeat
        while (a[i].nian<xn)or((a[i].nian=xn)and(a[i].yue<xy))do inc(i);
        while (a[j].nian>xn)or((a[j].nian=xn)and(a[j].yue>xy))do dec(j);
        if i<=j then
            begin
                y:=a[i];
                a[i]:=a[j];
                a[j]:=y;
                inc(i);
                dec(j);
            end;
    until i>j;
    if i<r then sort(i,r);
    if j>l then sort(l,j);
end;

begin
    assign(input,'birth.in');
    reset(input);
    assign(output,'birth.out');
    rewrite(output);
    readln(n);
    for i:=1 to n do
        readln(a[i].nian,a[i].yue);
    sort(1,n);
    for i:=1 to n do
        writeln(a[i].nian,' ',a[i].yue);
    close(input);
    close(output);
end.

没什么别的,只是想说当时快排的时候很不理解,都不会写,写程序就用PASCAL自带的排序,如今晚上小测验修改后的快排可以一遍AC感觉也是蛮欣慰的了。好像随着时间的推移,学到的东西越来越多,一些以前的东西更好理解。有时不必过分拘泥于现在,向下走,或许回头看看现在不算什么。

posted on 2015-11-02 19:31  川汉唐  阅读(241)  评论(0编辑  收藏  举报

导航