如何修改Java代码实现数组奇数降序、偶数升序排序?
解决方案
思路说明
你的代码已经完成了数组整体升序排序,这意味着偶数部分已经符合升序要求。要实现奇数降序,只需提取排序后的奇数部分并反转,再按「反转奇数 + 升序偶数」的顺序输出即可:
- 保留原数组的整体升序排序,确保偶数处于正确的升序状态。
- 从排序后的数组中提取所有奇数,将其反转(升序转降序)。
- 先打印反转后的奇数,再打印原排序数组中的偶数。
修改后的代码(使用集合简化操作)
import java.util.ArrayList; import java.util.Collections; import java.util.Arrays; public class SortOddEven { public static void main(String[] args) { // 假设arrayList已被初始化并填充随机数 int[] arrayList = {3,1,4,1,5,9,2,6}; System.out.println("\n" + "random numbers generated:"); System.out.println(Arrays.toString(arrayList).replace("[", "").replace("]", "").replace(",", "")); // 原整体升序排序逻辑不变 int temporaryArray; for (int i = 0; i < arrayList.length; i++) { for (int j = i+1; j < arrayList.length; j++) { if(arrayList[i] > arrayList[j]) { temporaryArray = arrayList[i]; arrayList[i] = arrayList[j]; arrayList[j] = temporaryArray; } } } System.out.println("\n" + "random numbers arranged:"); // 提取奇数并反转 ArrayList<Integer> oddNumbers = new ArrayList<>(); for (int num : arrayList) { if (num % 2 != 0) { oddNumbers.add(num); } } Collections.reverse(oddNumbers); // 打印反转后的奇数 for (int odd : oddNumbers) { System.out.print(odd + " "); } System.out.print("| "); // 打印升序偶数(原排序数组已满足) for (int num : arrayList) { if (num % 2 == 0) { System.out.print(num + " "); } } } }
纯数组实现(不使用集合)
如果不想依赖集合类,可以用数组操作完成反转:
import java.util.Arrays; public class SortOddEven { public static void main(String[] args) { int[] arrayList = {3,1,4,1,5,9,2,6}; System.out.println("\n" + "random numbers generated:"); System.out.println(Arrays.toString(arrayList).replace("[", "").replace("]", "").replace(",", "")); // 原整体升序排序逻辑不变 int temporaryArray; for (int i = 0; i < arrayList.length; i++) { for (int j = i+1; j < arrayList.length; j++) { if(arrayList[i] > arrayList[j]) { temporaryArray = arrayList[i]; arrayList[i] = arrayList[j]; arrayList[j] = temporaryArray; } } } System.out.println("\n" + "random numbers arranged:"); // 统计奇数数量并提取 int oddCount = 0; for (int num : arrayList) { if (num % 2 != 0) oddCount++; } int[] oddArray = new int[oddCount]; int idx = 0; for (int num : arrayList) { if (num % 2 != 0) { oddArray[idx++] = num; } } // 反转奇数数组 for (int i = 0; i < oddArray.length / 2; i++) { int temp = oddArray[i]; oddArray[i] = oddArray[oddArray.length - 1 - i]; oddArray[oddArray.length - 1 - i] = temp; } // 打印反转后的奇数 for (int odd : oddArray) { System.out.print(odd + " "); } System.out.print("| "); // 打印升序偶数 for (int num : arrayList) { if (num % 2 == 0) { System.out.print(num + " "); } } } }
内容的提问来源于stack exchange,提问作者Ronxmaine
相关产品推荐
相关产品推荐

