时间限制
2S
内存限制
1000Kb
问题描述:
给定N个不同的整数,要求对这N个整数按如下规则排序并输出。
规则一:所有的偶数排在奇数前面。
规则二:在规则一的前提下按照从大到小的顺序排序。
输入说明
数据由两行构成,第一行为整数n(n<=100),表示待排序整数的数量。第二行是n个整数,每个整数的取值区间都为[-32768~32767],整数之间以空格间隔。
输出说明
在一行输出排好序的整数,整数之间以空格间隔。
输入样例
5
1 2 3 4 5
输出样例
4 2 5 3 1
这个题方法很多,当然可以排序,统计奇数数组与偶数数组,先输出偶数数组,再输出奇数数组,但感觉较为繁琐
下面介绍一个引入compare函数来比较谁更"优"的方法
程序及具体解释如下:
#include <stdio.h>
int compare(int x, int y){//先写函数判断x和y谁更"优"(即谁更大或者谁为偶数)
int m = x % 2 == 0;
int n = y % 2 == 0;
if(m != n){
if(m == 1 && n == 0){
return 1;
}
if(m == 0 && n == 1){
return -1;
}
}
return x-y;
}//当x为偶数y为奇数或者x>y时输出正数(即x更优),其他情况输出负数
int main(){
int n;
scanf("%d", &n);
int a[n];
for(int i = 0; i < n; i++){
scanf("%d",&a[i]);
}
int k,j;
for(int i = 0; i < n - 1; i++){
for(j = i + 1, k = i; j < n; j++) {
if (compare(a[j], a[k]) > 0) { ///如果遍历出a[j]比a[k]更优
k = j; ///将j赋值给k,继续遍历a[j]看能不能找出
} ///比新的a[k]更优的,就这样反复,直到找
} ///到最优的
if(k != i){
int t = a[i]; //将最优的a[k]与啊[i]换位
a[i] = a[k];
a[k] = t;
}
}
for(int i = 0; i < n; i ++){
printf("%d ",a[i]);
}
}
这样我们就较为简洁的解决了这个问题