数列排序

数列排序

时间: 1ms        内存:128M

描述:

给定一个长度为n(1<=n<=200)的数列,将这个数列按如下规则排列。
最小数,最大数,次小数,次大数,......

输入:

第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。

输出:

输出一行,按从题目要求的顺序输出排序后的数列。

示例输入:

10
1 2 4 3 5 8 7 6 10 9

示例输出:

1 10 2 9 3 8 4 7 5 6

提示:

参考答案(内存最优[752]):

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


}

参考答案(时间最优[0]):

#include<iostream>
using namespace std;
int main()
{
	int n,m,a,b,c,f[201];
	cin>>n;
	for(m=1;m<=n;m++)
		cin>>f[m];
	for(m=1;m<n;m++)
	{
		b=m;
		for(a=m+1;a<=n;a++)
			if(f[b]>f[a]) b=a;
        c=f[m];f[m]=f[b];
		f[b]=c;
	}
	for(a=1;a<=(n+1)/2;a++)
	{
		if(a!=n+1-a) cout<<f[a]<<" "<<f[n+1-a];
		if(a==n+1-a) cout<<f[a];
         if(a!=(n+1)/2) cout<<" ";
	}
	return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注