数列排序
时间: 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;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。
