2011-06-01 22:06:46Morris

a104. 排序

http://zerojudge.tw/ShowProblem?problemid=a104

內容 :

幫我排個數字謝謝QQ

輸入說明 :

有多筆測資以EOF為結束

第一行有一個正整數n(1<=n<=1000),代表有幾個數字要請你幫忙排

第二行有n個可以用int儲存的正整數

輸出說明 :

輸出n個已由小到大排序好的正整數

範例輸入 :

6
7 9 0 4 1 8
8
1 9 9 0 0 9 2 8

範例輸出 :

0 1 4 7 8 9
0 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;
}

上一篇:d681. BinaryCount

下一篇:a121. 質數又來囉