level 11
铁砣陈
楼主
#include<stdio.h>
#define N 8
int a[N];
int merge(int start, int mid, int end)
{
int n1 = mid+1-start;
int n2 = end-mid;
int right[n1],left[n2];
int i,j,k;
for(i=0; i<n1; i++)
left[i] = a[start+i];
for(j=0; j<n2; j++)
right[j] = a[mid+1+j];
i=j=0;
for(k=0; i<n1 && j<n2; k++)
if(right[i]<left[j]){
a[start+k]=right[i];
i++;
} else {
a[start+k]=left[j];
j++;
}
for(; i<n1;){
a[start+k]=right[i];
k++;
i++;
}
for(; j<n2;){
a[start+k]=left[j];
k++;
i++;
}
return 0;
}
int sort(int start, int end)
{
if(start<end){
int mid = (start+end)/2;
sort(start, mid);
sort(mid+1, end);
merge(start, mid, end);
}
return 0;
}
int main()
{
int i;
while(1){
for(i=0; i<N;i++)scanf("%d",&a[i]);
sort(0,7);
for(i=0; i<N;i++)printf("%d ",a[i]);
}
}
2011年08月26日 05点08分
1
#define N 8
int a[N];
int merge(int start, int mid, int end)
{
int n1 = mid+1-start;
int n2 = end-mid;
int right[n1],left[n2];
int i,j,k;
for(i=0; i<n1; i++)
left[i] = a[start+i];
for(j=0; j<n2; j++)
right[j] = a[mid+1+j];
i=j=0;
for(k=0; i<n1 && j<n2; k++)
if(right[i]<left[j]){
a[start+k]=right[i];
i++;
} else {
a[start+k]=left[j];
j++;
}
for(; i<n1;){
a[start+k]=right[i];
k++;
i++;
}
for(; j<n2;){
a[start+k]=left[j];
k++;
i++;
}
return 0;
}
int sort(int start, int end)
{
if(start<end){
int mid = (start+end)/2;
sort(start, mid);
sort(mid+1, end);
merge(start, mid, end);
}
return 0;
}
int main()
{
int i;
while(1){
for(i=0; i<N;i++)scanf("%d",&a[i]);
sort(0,7);
for(i=0; i<N;i++)printf("%d ",a[i]);
}
}

