交叉排序
Time Limit: 1000ms Memory limit: 32768K 有疑问?点这里^_^
题目描述
输入N个数,把所有奇数位置上的数从小到大排序,把偶数位置上的数从大到小排序。
输入
输入的第一行是一个正整数N(2<=N<=100)。
第二行是N个用空格隔开的整数。
输出
输出只有一行N个数,是按要求排序后的序列,用空格隔开。
示例输入
6
1 2 3 4 5 6
示例输出
1 6 3 4 5 2
Time Limit: 1000ms Memory limit: 32768K 有疑问?点这里^_^
题目描述
输入N个数,把所有奇数位置上的数从小到大排序,把偶数位置上的数从大到小排序。
输入
输入的第一行是一个正整数N(2<=N<=100)。
第二行是N个用空格隔开的整数。
输出
输出只有一行N个数,是按要求排序后的序列,用空格隔开。
示例输入
6
1 2 3 4 5 6
示例输出
1 6 3 4 5 2
# include <stdio.h>
int main()
{
int N,i,j,t,key;
int even[50];//存放偶数位置的数
int odd[50];//存放奇数位置的数
int len1,len2;//
len1 = len2 = 1;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
scanf("%d",&key);
if(i%2==1)
odd[len1++] = key;
else
even[len2++] = key;
}
/*奇数位置从小到大*/
for(i=1;i<=len1-1;i++)
{
for(j=1;j<=len1-1-i;j++)
{
if(odd[j]>odd[j+1])
{
t = odd[j];
odd[j]=odd[j+1];
odd[j+1]=t;
}
}
}
/*偶数位置从大到小*/
for(i=1;i<=len2-1;i++)
{
for(j=1;j<=len2-1-i;j++)
{
if(even[j]<even[j+1])
{
t = even[j];
even[j]=even[j+1];
even[j+1]=t;
}
}
}
len1 = len2 = 1;
for(i=1;i<=N;i++)
{
if(i%2)
{
if(i==N)
printf("%d\n",odd[len1++]);
else
printf("%d ",odd[len1++]);
}
else
{
if(i==N)
printf("%d\n",even[len2++]);
else
printf("%d ",even[len2++]);
}
}
}