交叉排序

来源:互联网 发布:手机淘宝如何切换账号 编辑:程序博客网 时间:2024/05/01 11:26

交叉排序

Time Limit: 1000MS Memory limit: 32768K

题目描述

输入N个数,把所有奇数位置上的数从小到大排序,把偶数位置上的数从大到小排序。

输入

输入的第一行是一个正整数N(2<=N<=100)。
第二行是N个用空格隔开的整数。

输出

输出只有一行N个数,是按要求排序后的序列,用空格隔开。

示例输入

61 2 3 4 5 6

示例输出

1 6 3 4 5 2

提示

 

来源

2011软件1-5班《程序设计基础》机试 tongjiantao

示例程序

 
  • 提交 
  • 状态

#include <stdio.h>#include <stdlib.h>int main(){    int n,a[110],i,j,t;    scanf("%d",&n);    for(i=0; i<n; i++)        scanf("%d",&a[i]);    if(n%2==0)    {        for(i=0; i<=n-3; i=i+2)            for(j=0; j<=n-i-3; j=j+2)                if(a[j]>a[j+2])                {                    t=a[j];                    a[j]=a[j+2];                    a[j+2]=t;                }        for(i=1; i<=n-2; i=i+2)            for(j=1; j<=n-i-2; j=j+2)                if(a[j]<a[j+2])                {                    t=a[j];                    a[j]=a[j+2];                    a[j+2]=t;                }    }    else    {        for(i=0; i<=n-2; i=i+2)            for(j=0; j<=n-i-2; j=j+2)                if(a[j]>a[j+2])                {                    t=a[j];                    a[j]=a[j+2];                    a[j+2]=t;                }        for(i=1; i<=n-3; i=i+2)            for(j=1; j<=n-i-3; j=j+2)                if(a[j]<a[j+2])                {                    t=a[j];                    a[j]=a[j+2];                    a[j+2]=t;                }    }    for(i=0; i<n; i++)        if(i==n-1)            printf("%d\n",a[i]);        else            printf("%d ",a[i]);    return 0;}

0 0