【题目】
给一个 10 个整数的序列,要求对其重新排序。排序要求:
1.奇数在前,偶数在后;
2.奇数按从大到小排序;
3.偶数按从小到大排序。
【输入格式】
输入一行,包含 10 个整数,彼此以一个空格分开,每个整数的范围是大于等于 0,小于等于 100。
【输出格式】
按照要求排序后输出一行,包含排序后的 10 个整数,数与数之间以一个空格分开。
【样例】
样例输入
4 7 3 13 11 12 0 47 34 98
样例输出
47 13 11 7 3 0 4 12 34 98
【思路】
1.先把输入的整数数组(int[] g
)分成两个 ArrayList
(ArrayList 是 Java 中的一个类,它实现了 List 接口。它是一个动态数组,可以根据需要自动调整大小)
2. 对奇数 ArrayList 进行从大到小排序 ; 对偶数ArrayList 进行从小到大排序
3.把排序后的两个ArrayList合并回到原来的整数数组(int[] g
)
【代码】
public static int[] coupons(int[] g) {
// 把奇数和偶数分成两个 ArrayList 分别排序之后再合并
ArrayList<Integer> odds = new ArrayList<>();
ArrayList<Integer> even = new ArrayList<>();
for (int i : g) {
if (i % 2 == 1) {
// 如果是奇数,加入odds
odds.add(i);
} else {
// 如果是偶数,加入even
even.add(i);
}
}
// 对奇数ArrayList 进行从大到小的排序
odds.sort((a,b) -> b -a);
// 对偶数ArrayList 进行从小到大的排序
even.sort((a,b) -> a -b);
// 合并两个ArrayList
int size1 = odds.size();
int size2 = even.size();
for(int i = 0; i < size1; i++){
g[i] = odds.get(i);
}
for(int i = 0; i < size2; i++){
g[i + size1] = even.get(i);
}
return g;
}