//第一行為要排序的數字數目
//第二行為要排序的數字
#include
int A[10001],k[10001];
int f(int a,int b){
if(a==b)return 0;
f(a,(a+b)/2);
f((a+b)/2+1,b);
//A[a]~A[(a+b)/2]
//A[(a+b)/2+1]~A[b]
int i,j,K;
i=a;
j=(a+b)/2+1;
K=a;
while(i<=(a+b)/2&&j<=b){
if(A[i]<=A[j]){
k[K]=A[i];
i++;
} else {
k[K]=A[j];
j++;
}
K++;
}
while(i<=(a+b)/2){
k[K]=A[i];
i++;
K++;
}
while(j<=b){
k[K]=A[j];
j++;
K++;
}
for(i=a;i<=b;i++){
A[i]=k[i];
}
}
main(){
int i,j,k,n;
int tmp;
while(scanf("%d",&n)==1){
for(i=0;i
scanf("%d",&A[i]);
}
f(0,n-1);
for(i=0;i
printf("%d ",A[i]);
}
puts("");
}
scanf(" ");
}
//第二行為要排序的數字
#include
int A[10001],k[10001];
int f(int a,int b){
if(a==b)return 0;
f(a,(a+b)/2);
f((a+b)/2+1,b);
//A[a]~A[(a+b)/2]
//A[(a+b)/2+1]~A[b]
int i,j,K;
i=a;
j=(a+b)/2+1;
K=a;
while(i<=(a+b)/2&&j<=b){
if(A[i]<=A[j]){
k[K]=A[i];
i++;
} else {
k[K]=A[j];
j++;
}
K++;
}
while(i<=(a+b)/2){
k[K]=A[i];
i++;
K++;
}
while(j<=b){
k[K]=A[j];
j++;
K++;
}
for(i=a;i<=b;i++){
A[i]=k[i];
}
}
main(){
int i,j,k,n;
int tmp;
while(scanf("%d",&n)==1){
for(i=0;i
scanf("%d",&A[i]);
}
f(0,n-1);
for(i=0;i
printf("%d ",A[i]);
}
puts("");
}
scanf(" ");
}
沒有留言:
張貼留言