24h購物| | PChome| 登入
2011-06-01 22:06:46| 人氣1,348| 回應0 | 上一篇 | 下一篇

a104. 排序

推薦 0 收藏 0 轉貼0 訂閱站台

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;
}

台長: Morris
人氣(1,348) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: ZeroJudge |
此分類下一篇:a121. 質數又來囉
此分類上一篇:d681. BinaryCount

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文