高分悬赏:Java语言将数组中的奇数按照从大到小的顺序排列,偶数按照从小到大的顺序排列

高分悬赏: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));
    } 
}