高分悬赏:Java语言将数组中的奇数按照从大到小的顺序排列,偶数按照从小到大的顺序排列
说一下实现思路吧,如果需要时对数组奇数下标的数据按奇和偶数不同下标不同排序,思路如下
1、收集奇数位数据到数组,利用 Collections 集合的 sort 方法完成排序;
2、收集偶数的数据,并排序;
3、创建一个 大数组,奇偶为分别取前面的排序结果。
如果想对整个数组元素的奇偶数排序,就不太好弄,因为个数不同,最终结果怎么处理是个问题。
public static void px(int[] nums) {
int[] jishu;// 定义一个奇数数组;
int[] oushu;// 定义一个偶数数组;
int n = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] % 2 == 0) {
n++;
}
}
jishu = new int[nums.length - n];
oushu = new int[n];
int count1 = 0;
int count2 = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] % 2 == 0) {
count1++;
oushu[count1 - 1] = nums[i];
} else {
count2++;
jishu[count2 - 1] = nums[i];
}
}
Arrays.sort(jishu);// 奇数数组排序 从小到大
Arrays.sort(oushu);// 偶数数组排序 从小到大
// 把奇数排序改为从大到小
int[] newJsshu = new int[nums.length - n];
for (int j = 0; j < jishu.length; j++) {
newJsshu[j] = jishu[jishu.length - j - 1];
}
// 打印奇数
System.out.print("奇数为:");
for (int i = 0; i < newJsshu.length; i++) {
System.out.print(newJsshu[i] + " ");
}
System.out.println();
System.out.print("偶数为:");
for (int i = 0; i < oushu.length; i++) {
System.out.print(oushu[i] + " ");
}
}
public static void main(String[] args) {
Integer[] originalArray = new Integer[] { 1, 10, 9, 2, 3, 8, 11, 15, 16, 20, 18, 4, 5, 6, 21, 23 };// 原数组
// 原数组打印,顺便记录两个新数组的长度
Integer evenNumbersLength = 0;// 偶数数组下标
Integer oddNumberLength = 0;// 奇数数组下标
StringBuffer originalArraySB = new StringBuffer();
originalArraySB.append("原数组:[");
for (Integer num : originalArray) {
originalArraySB.append(num);
originalArraySB.append(" ,");
if (num % 2 == 0) {// 偶数
evenNumbersLength++;
} else {// 奇数
oddNumberLength++;
}
}
String originalArrayS = originalArraySB.substring(0, originalArraySB.length() - 2);
System.out.println(originalArrayS + "]");
Integer[] oddNumberArray = new Integer[oddNumberLength];// 奇数数组
Integer[] evenNumbersArray = new Integer[evenNumbersLength];// 偶数数组
Integer i = 0;// 偶数数组下标
Integer j = 0;// 奇数数组下标
for (Integer num : originalArray) {
if (num % 2 == 0) {// 偶数
evenNumbersArray[i] = num;
i++;
} else {// 奇数
oddNumberArray[j] = num;
j++;
}
}
// 偶数数组--正序排列
Arrays.sort(evenNumbersArray);
//拼输出字符串
StringBuffer evenNumbersArraySB = new StringBuffer();
evenNumbersArraySB.append("偶数数组:[");
for (Integer num : evenNumbersArray) {
evenNumbersArraySB.append(num);
evenNumbersArraySB.append(" ,");
}
String evenNumbersArrayS = evenNumbersArraySB.substring(0, evenNumbersArraySB.length() - 2);
System.out.println(evenNumbersArrayS + "]");
// 奇数数组--转list 先正序,再反转
List<Integer> asList = Arrays.asList(oddNumberArray);
Collections.sort(asList);// 正序
Collections.reverse(asList);// 反转
//拼输出字符串
StringBuffer oddNumberArraySB = new StringBuffer();
oddNumberArraySB.append("奇数数组:[");
for (Integer num : asList) {
oddNumberArraySB.append(num);
oddNumberArraySB.append(" ,");
}
String oddNumberArrayS = oddNumberArraySB.substring(0, oddNumberArraySB.length() - 2);
System.out.println(oddNumberArrayS + "]");
}
题目不清,一奇一偶怎么排?奇数在前偶数在后?
public class Sample {
public static void main(String[] args) {
Integer a[] = new Integer[] {
1,2,4,3,5,6,7,8,9,0
};
//直接用数组的sort方法+比较器就可以了(这里是奇数在前偶数在后)
Arrays.sort(a, (a1,a2)->((a1%2==1&&a2%2==1) ? a2-a1: (a1%2==0&&a2%2==0 ? a1-a2 : (a1%2==1) ? -1 : 1 )));
System.out.println(Arrays.toString(a));
}
}