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
相关产品推荐
相关产品推荐

