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

Java如何仅对数组奇数升序排序 保持偶数原位置不变

代码参考截图

实现方案

实现逻辑非常直接,分三步即可完成需求:

  • 遍历原始数组,筛出所有奇数元素单独存储
  • 对筛选出的奇数集合做升序排序
  • 再次遍历原始数组,遇到奇数位置时,按顺序从排好序的奇数集合中取值替换,偶数元素直接保留原位置的值即可

以你给出的示例为例:

原数组:[5, 8, 6, 3, 4]
筛出奇数得到集合 [5,3],排序后为 [3,5]
回填奇数到原数组对应位置,最终得到结果 [3, 8, 6, 5, 4],完全符合预期。

可直接运行的Java实现代码如下:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class OddArraySorter {
    public static void main(String[] args) {
        int[] testArr = {5, 8, 6, 3, 4};
        System.out.println(Arrays.toString(sortOnlyOdd(testArr)));
    }

    private static int[] sortOnlyOdd(int[] sourceArr) {
        // 提取所有奇数
        List<Integer> oddList = new ArrayList<>();
        for (int num : sourceArr) {
            if (num % 2 != 0) {
                oddList.add(num);
            }
        }
        // 奇数升序排序
        Collections.sort(oddList);
        // 回填结果
        int cursor = 0;
        for (int i = 0; i < sourceArr.length; i++) {
            if (sourceArr[i] % 2 != 0) {
                sourceArr[i] = oddList.get(cursor++);
            }
        }
        return sourceArr;
    }
}

代码运行后输出为[3, 8, 6, 5, 4],和预期结果一致。如果不想修改原数组,可以在方法开头先拷贝一份原数组做操作,避免影响入参的原始值。

内容的提问来源于stack exchange,提问作者Krishna Jamadar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:54:24