码迷,mamicode.com
首页 > 其他好文 > 详细

快排练习

时间:2015-11-02 21:21:57      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

用快排完成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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!