交叉排序
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<stdio.h>
#define MaxN 100
int n,a[MaxN];
void Quick_Sort1(int l,int r) //从小到大快速排序
{
if(l<r)
{
int i=l,j=r,tmp=a[l];
while(i<j)
{
while(i<j&&tmp<=a[j])
j-=2;
a[i]=a[j];
while(i<j&&tmp>=a[i])
i+=2;
a[j]=a[i];
}
a[i]=tmp;
Quick_Sort1(l,i-2);
Quick_Sort1(i+2,r);
}
}
void Quick_Sort2(int l,int r)//从大到小快速排序
{
if(l<r)
{
int i=l,j=r,tmp=a[l];
while(i<j)
{
while(i<j&&tmp>=a[j])
j-=2;
a[i]=a[j];
while(i<j&&tmp<=a[i])
i+=2;
a[j]=a[i];
}
a[i]=tmp;
Quick_Sort2(l,i-2);
Quick_Sort2(i+2,r);
}
}
int main()
{
while(~scanf("%d",&n))
{
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
if(n%2) //n分奇数个还是偶数个
{
Quick_Sort1(0,n-1);
Quick_Sort2(1,n-2);
}
else
{
Quick_Sort1(0,n-2);
Quick_Sort2(1,n-1);
}
for(int i=0; i<n; i++)
printf("%d%c",a[i],i==n-1?'\n':' ');
}
return 0;
}