交叉排序:偶数位置上的数从大到小排,奇数位置上的数从小到大排!注意是位置。。。
代码:
#include<bits/stdc++.h>
using namespace std;
int a[255],b[255],c[255];
int cmp(int a,int b)
{
return a>b;
}
int main()
{
int i,j,n,m,k=0,p=0;
cin>>n;
for(i=0;i<n;i++)
{
cin>>m;
if((i+1)%2==0)
{
b[k]=m;
k++;
}
else
{
a[p]=m;
p++;
}
}
sort(a,a+p);
sort(b,b+k,cmp);
p=k=0;
for(i=0;i<n;i++)
{
if((i+1)%2==0)
{
c[i]=b[k];
k++;
}
else
{
c[i]=a[p];
p++;
}
}
for(i=0;i<n-1;i++)
cout<<c[i]<<' ';
cout<<c[i]<<endl;
return 0;
}
代码写得并不好看!还需努力;写的时候没能一遍成功,所以就单步调试了一下,发现sort函数用错了;排序结束地址都多加了一!但只影响到了奇数位置的排序,并没有影响到偶数位置的排序,然后想了想为啥,发现数组中的元素的初始值都是零,很惊讶!所以奇数位置的排序一定会被影响的;偶数位置则不一定,因为题过了,所以后台测试数据应该都是大于等于零的!所以当排序结束地址多加了一时,奇数位置排序一定是错的!