2013年1月4日 星期五

[ZJ] a104. 排序


內容 :
幫我排個數字謝謝QQ
輸入說明 :
有多筆測資以EOF為結束
第一行有一個正整數n(1<=n<=1000),代表有幾個數字要請你幫忙排
第二行有n個可以用int儲存的正整數
輸出說明 :
輸出n個已由小到大排序好的正整數
範例輸入 :
67 9 0 4 1 881 9 9 0 0 9 2 8
範例輸出 :
0 1 4 7 8 90 0 1 2 8 9 9 9
提示 :
背景知識: 基礎排序

出處 :
yoooooooo (管理:shik)

作法 : 秒殺

/**********************************************************************************/
/*  Problem: a104 "排序" from yoooooooo                                         */
/*  Language: C                                                                   */
/*  Result: AC (6ms, 276KB) on ZeroJudge                                          */
/*  Author: morris1028 at 2011-06-01 20:17:41                                     */
/**********************************************************************************/


#include<stdio.h>
struct Axis{
    int t;
}Data[1001], X[1001];
void Merge(int l, int m, int h) {
    int In1=l, In2=m+1;
    int a, b, Top=0;
    while(In1<=m && In2<=h)
        if((Data[In1].t < Data[In2].t))
             X[Top++]=Data[In1++];
       else  X[Top++]=Data[In2++];
    while(In1<=m)   X[Top++]=Data[In1++];
    while(In2<=h)   X[Top++]=Data[In2++];
    for(a=0,b=l;a<Top;a++,b++)
        Data[b]=X[a];
}
void MergeSort(int l, int h) {
    if(l < h) {
        int m=(l+h)/2;
        MergeSort(l  ,m);
        MergeSort(m+1,h);
        Merge(l,m,h);
    }
}

main() {
    int n, a;
    while(scanf("%d", &n) == 1) {
        for(a = 0; a < n; a++)
            scanf("%d", &Data[a].t);
        MergeSort(0, n-1);
        for(a = 0; a < n; a++)
            printf("%d ", Data[a].t);
        puts("");
    }
    return 0;
}

沒有留言:

張貼留言