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;
}
下一篇:a121. 質數又來囉