內容 :
幫我排個數字謝謝QQ
輸入說明 :
有多筆測資以EOF為結束
第一行有一個正整數n(1<=n<=1000),代表有幾個數字要請你幫忙排
第二行有n個可以用int儲存的正整數
第一行有一個正整數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;
}
沒有留言:
張貼留言