题解 | #整数奇偶排序#
整数奇偶排序
https://www.nowcoder.com/practice/bbbbf26601b6402c9abfa88de5833163
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; //奇数放左边,偶数放右边 bool isOdd(int left, int right){ if(left % 2 == 0){ return false; }else{ return true; } } //比较左边的数,从大到小 bool compareLeft(int left, int right){ if(left > right){ return true; }else{ return false; } } //比较右边的数,从小到大 bool compareRight(int left, int right){ if(left > right){ return false; }else{ return true; } } //先分奇偶两部分,再在奇偶两部分分别排序 int main() { int arr[10]; int countOdd = 0; int countEven = 0; while (scanf("%d%d%d%d%d%d%d%d%d%d", &arr[0],&arr[1],&arr[2],&arr[3],&arr[4],&arr[5],&arr[6],&arr[7],&arr[8],&arr[9]) != EOF) { // 注意 while 处理多个 case //计算数组中的奇偶个数 for(int i = 0; i < 10; i++){ if(arr[i] % 2 == 0){ countEven++; }else{ countOdd++; } } sort(arr, arr + 10, isOdd); sort(arr, arr + countOdd, compareLeft); sort(arr + countOdd, arr + 10, compareRight); for(int i = 0; i < 10; i++){ printf("%d ", arr[i]); } printf("\n"); } } // 64 位输出请用 printf("%lld")