交叉排序
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>
int main()
{
int a[110];
int n,t,k;
scanf("%d",&n);
for(int i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
for(int i=0; i<n-1; i+=2)
{
k=i;
for(int j=i+2; j<=n-1; j+=2)
if(a[j]<a[k])
k=j;
if(k!=i)
{
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
for(int i=1; i<n-1; i+=2)
{
k=i;
for(int j=i+2; j<=n-1; j+=2)
if(a[j]>a[k])
k=j;
if(k!=i)
{
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
for(int i=0; i<n; i++)
{
if(i!=0)
printf(" %d",a[i]);
else printf("%d",a[i]);
}
printf("\n");
return 0; }
本文介绍了一种特殊的排序算法——交叉排序。该算法将输入的序列分为奇数位和偶数位两部分,分别进行升序和降序排列,并提供了一个使用C语言实现的选择排序示例。
1万+

被折叠的 条评论
为什么被折叠?



