交叉排序
Time Limit: 1000MS Memory limit: 32768K
题目描述
输入N个数,把所有奇数位置上的数从小到大排序,把偶数位置上的数从大到小排序。
输入
输入的第一行是一个正整数
N(2<=N<=100)。
第二行是 N 个用空格隔开的整数。
第二行是 N 个用空格隔开的整数。
输出
输出只有一行
N
个数,是按要求排序后的序列,用空格隔开。
示例输入
6 1 2 3 4 5 6
示例输出
1 6 3 4 5 2
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <map>
using namespace std;
int a[105],b[105];
int cmp(void const *c,void const *d)
{
return *(int *)c - *(int *)d;
}
int cmp1(void const *c,void const *d)
{
return *(int *)d - *(int *)c;
}
int main()
{
int n;
cin>>n;
int x;
int s1=0,s2=0;
for(int i=1;i<=n;i++)
{
cin>>x;
if(i%2==1)
a[s1++]=x;
else
b[s2++]=x;
}
qsort(a,s1,sizeof(a[0]),cmp);
qsort(b,s2,sizeof(b[0]),cmp1);
int k1=0,k2=0;
for(int i=1;i<n;i++)
{
if(i%2==1)
cout<<a[k1++]<<" ";
else cout<<b[k2++]<<" ";
}
if(s1>s2)
cout<<a[--s1]<<endl;
else cout<<b[--s2]<<endl;
return 0;
}