标签:
用快排完成n(n<=100)个人年龄的从小到大的排序,要求出生年相同的按月排。
输入:第一行n个人
2到n+1行出生 年 月(1992 9)
输出:年龄的从大到小的排序。
思路:嘿嘿,原本是考察双关键字排序的,可是咱不会……就写了俩快排。
program t1; type age=record year,mon:longint; end; var n,i,j:longint; a:array[1..100]of age; procedure sort(l,r:longint); var i,j,x: longint; y:age; begin i:=l; j:=r; x:=a[(l+r) div 2].year; repeat while a[i].year<x do inc(i); while x<a[j].year do dec(j); if not(i>j) then begin y:=a[i]; a[i]:=a[j]; a[j]:=y; inc(i); j:=j-1; end; until i>j; if l<j then sort(l,j); if i<r then sort(i,r); end; procedure kp(l,r:longint); var i,j,x: longint; y:age; begin i:=l; j:=r; x:=a[(l+r) div 2].mon; repeat while a[i].mon<x do inc(i); while x<a[j].mon do dec(j); if not(i>j) then begin y:=a[i]; a[i]:=a[j]; a[j]:=y; inc(i); j:=j-1; end; until i>j; if l<j then kp(l,j); if i<r then kp(i,r); end; begin readln(n); for i:=1 to n do readln(a[i].year,a[i].mon); sort(1,n); j:=1; for i:=1 to n do begin if a[i].year<>a[i+1].year then begin kp(j,i); j:=i+1; end; end; for i:=1 to n do writeln(a[i].year,‘ ‘,a[i].mon); end.
标签:
原文地址:http://www.cnblogs.com/liuxinyu/p/4931232.html