排序

输入50个正整数,将其中的偶数按升序排列,奇数按降序排列。若偶数个数多于奇数个数,则偶数放在数组的前边,奇数放在其后;否则奇数放在前,偶数在后;输出排序后的结果。

#include <iostream>
#include <cstdio>
#include <algorithm>

/**
* 奇数在前,从大到小;偶数在后,从小到大 
*/ 
using namespace std;

bool Compare1(int x,int y){
    //如果两个都是奇数
    if(x % 2 == 1 && y % 2 == 1){
        //从大到小 
        return x > y;
    }else if(x % 2 == 0 && y % 2 == 0){
        return x < y;
    }else if(x % 2 == 0 && y % 2 == 1){
        return true;
    }else{
        //偶数在前 
        return false;
    }
}

bool Compare2(int x,int y){
    //如果两个都是奇数
    if(x % 2 == 1 && y % 2 == 1){
        //从大到小 
        return x > y;
    }else if(x % 2 == 0 && y % 2 == 0){
        return x < y;
    }else if(x % 2 == 0 && y % 2 == 1){
        return false;
    }else{
        return true;
    }
}
int arr[10];


int main(){
    int n;
    int even = 0; //偶数个数 
    int odd = 0;  //奇数个数 
     
    while(scanf("%d",&n)!=EOF){
        
        for(int i = 0;i < n;i++){
            scanf("%d",&arr[i]);
            if(i % 2){
                ++odd;
            }else{
                ++even;
            } 
        }
        
        if(odd > even){
            //奇数个数多 ,奇数在前 
            sort(arr,arr+n,Compare1);
        }else{
            sort(arr,arr+n,Compare2);
        }
    
        for(int i = 0;i < n;i++){
            printf("%d ",arr[i]);
        }        
    }
    return 0;
}
原文地址:https://www.cnblogs.com/juanzhi/p/12901203.html