对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,
奇数和偶数交叉着放且输出数组第一位放奇数,若奇数和偶数不等长,则把剩下的直接放到数组中。
#include<iostream> #include<vector> #include<algorithm> using namespace std; bool cmp(int &a,int &b) { return (a>b); } void changnum(int *input,int n,int *output) { vector<int> vecOdd,vecEven;//Odd存放奇数、Even存放偶数 for(unsigned i=0;i<n;i++) { if(input[i]%2==0) vecEven.push_back(input[i]); else vecOdd.push_back(input[i]); } sort(vecOdd.begin(),vecOdd.end());//奇数按升序排列 sort(vecEven.begin(),vecEven.end(),cmp);//偶数按降序排列 unsigned len1=vecOdd.size(),len2=vecEven.size(); unsigned k1=0,k2=0,j=0; while(k1<len1 && k2<len2) { output[j++]=vecOdd[k1++]; output[j++]=vecEven[k2++]; } while(k1<len1) output[j++]=vecOdd[k1++]; while(k2<len2) output[j++]=vecEven[k2++]; } void main() { const int n=6; int input[n]={1,3,5,7,9,0}; int output[n]; changnum(input,n,output); for(int i=0;i<n;i++) cout<<output[i]<<" "; cout<<endl; }
思路:用2个vector<int>分别存储奇数和偶数,用#include<algorithm>中自带的sort进行排序,看看自己编写的sort中cmp的写法。对于vector<int>的
下标,用unsigned类型就行。这个unsigned对于string的下标等也可以用,可以通用。
原文地址:http://www.cnblogs.com/Xylophone/p/3811006.html