You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组奇偶元素按规则排序:如何得到预期输出[5,2,3,1,4]?

问题分析与代码修改方案

你的代码错误出在合并数组的逻辑上:当前代码是把排序后的奇数和偶数按顺序交替填充到新数组,但实际要求是:

  • 排序后的奇数元素要放回原数组中原本是奇数的那些索引位置(原索引0、2、3)
  • 排序后的偶数元素要放回原数组中原本是偶数的那些索引位置(原索引1、4)

修改步骤

  1. 新增两个列表,分别记录原数组中奇数元素和偶数元素的索引位置
  2. 排序完成后,将排序后的奇数元素依次填充到原奇数索引位置,偶数元素依次填充到原偶数索引位置

修改后的完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:30:25