数组奇偶元素按规则排序:如何得到预期输出[5,2,3,1,4]?
问题分析与代码修改方案
你的代码错误出在合并数组的逻辑上:当前代码是把排序后的奇数和偶数按顺序交替填充到新数组,但实际要求是:
- 排序后的奇数元素要放回原数组中原本是奇数的那些索引位置(原索引0、2、3)
- 排序后的偶数元素要放回原数组中原本是偶数的那些索引位置(原索引1、4)
修改步骤
- 新增两个列表,分别记录原数组中奇数元素和偶数元素的索引位置
- 排序完成后,将排序后的奇数元素依次填充到原奇数索引位置,偶数元素依次填充到原偶数索引位置
修改后的完整代码
import java.util.ArrayList; import java.util.Arrays; public class BubbleSorting { static void bubbleSort(ArrayList<Integer> list, Boolean isAscending) { int n = list.size(); for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (isAscending) { // 升序排序:前一个大于后一个则交换 if (list.get(j) > list.get(j + 1)) { int temp = list.get(j); list.set(j, list.get(j + 1)); list.set(j + 1, temp); } } else { // 降序排序:前一个小于后一个则交换 if (list.get(j) < list.get(j + 1)) { int temp = list.get(j); list.set(j, list.get(j + 1)); list.set(j + 1, temp); } } } } } public static void main(String[] args) { int[] num = {3,4,5,1,2}; ArrayList<Integer> even = new ArrayList<>(); ArrayList<Integer> odd = new ArrayList<>(); // 新增:记录原数组中奇数和偶数元素的索引位置 ArrayList<Integer> oddIndices = new ArrayList<>(); ArrayList<Integer> evenIndices = new ArrayList<>(); for(int i=0; i<num.length; i++) { if (num[i] % 2 == 0) { even.add(num[i]); evenIndices.add(i); // 记录偶数元素的原索引 } else { odd.add(num[i]); oddIndices.add(i); // 记录奇数元素的原索引 } } System.out.println("Before_sort odd: " + odd); System.out.println("Before_sort even: " + even); bubbleSort(odd, false); // 奇数降序 bubbleSort(even, true); // 偶数升序 System.out.println("After_sort odd: " + odd); System.out.println("After_sort even: " + even); int[] combinedArray = new int[num.length]; // 填充排序后的奇数到原奇数索引位置 for (int i = 0; i < odd.size(); i++) { combinedArray[oddIndices.get(i)] = odd.get(i); } // 填充排序后的偶数到原偶数索引位置 for (int i = 0; i < even.size(); i++) { combinedArray[evenIndices.get(i)] = even.get(i); } System.out.println(Arrays.toString(combinedArray)); } }
代码说明
- 新增
oddIndices和evenIndices列表,用来记录原数组中奇数、偶数元素的位置,确保排序后的元素能精准放回指定位置 - 合并数组时,不再是交替填充,而是根据记录的索引将元素放回原位置
- 原有的冒泡排序逻辑是正确的,无需修改
运行这段代码后,输出结果即为预期的[5, 2, 3, 1, 4]。
内容的提问来源于stack exchange,提问作者saran
相关产品推荐
相关产品推荐

