给你一个有n个整数的序列,a1,a2,a3,…an(下标从1开始)。
现在进行下列操作,将下标为奇数的元素按照升序排列,下标为偶数的元素按照降序排列,然后输出。
比如,给你n=8,序列为 2 6 7 1 3 8 9 4。
则下标为奇数的元素有2 7 3 9,排序后为2 3 7 9。
下标为偶数的元素有6 1 8 4,排序后为8 6 4 1。
则输出为 2 8 3 6 7 4 9 1
输入数据包含多组。每一组测试数据的第一行为一个整数n(n<1000),表示序列的个数,第二行有以空格隔开的n个整数a1,a2,a3,…an。输入数据以n=0结束
按要求输出,每一个序列占一行,每两个元素之间用空格隔开(每一行最后不应包含空格)。
8
2 6 7 1 3 8 9 4
0
2 8 3 6 7 4 9 1
#include
#include
#include
#define MaxSize 1040
拆分数组,拆成奇数下标与偶数下标
void part(int a[],int n,int b[],int c[],int &bl,int &cl)//b存放奇数下标,c存放偶数下标
{
int i,j=0,k=0;
for(i=0;i<n;i++)
{
if(i%2==0)//下标为奇数
{
b[j]=a[i];
j++;
}
else
{
c[k]=a[i];
k++;
}
}
bl=j;
cl=k;
}
void sort1(int a[],int n) //升序排序
{
int i,j,t;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
void sort2(int a[],int n)//降序排序
{
int i,j,t;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j]<a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
void sum(int a[],int b[],int c[],int n)//合并
{
int i,j=0,k=0;
for(i=0;i<n;i++)
{
if(i%2==0)
{
a[i]=b[j];
j++;
}
else
{
a[i]=c[k];
k++;
}
}
}
int main()
{
int n,a[MaxSize],b[MaxSize],c[MaxSize],i,bl=0,cl=0;
while(scanf("%d",&n) && n!=0)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
part(a,n,b,c,bl,cl);
sort1(b,bl);
sort2(c,cl);
sum(a,b,c,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}
//system("pause");
return 0;
}