[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感觉也是蛮欣慰的了。好像随着时间的推移,学到的东西越来越多,一些以前的东西更好理解。有时不必过分拘泥于现在,向下走,或许回头看看现在不算什么。