繁体   English   中英

对偶数和奇数数组中的奇数进行排序

[英]Sort odd numbers in Array of even and odd numbers

我需要对输入数组中的奇数进行排序。 所以我们对数组中的偶数什么都不做,而是按升序对奇数进行排序

public static void main(String[] args) {
    System.out.println(sortArray(new int[]{1, 5, 2, 7, 3}));
}
public static int[] sortArray(int[] array) {
    List<Integer> odds = new ArrayList<>();
    for (int elmnt : array) {
        if (elmnt % 2 != 0) {
            odds.add(elmnt);
        }
    }
    odds.stream().sorted();
    for (int i = 0; i < array.length; i++) {
        if (array[i] %2 != 0){
            for (int j = 0; j < odds.size(); j++) {
                array[i] = odds.get(j);
            }
        }
    }
    return array;
}

在这个例子中,数组应该变成:[1, 3, 2, 5, 7]

我怎样才能做到这一点?

  • 首先,编写一个排序例程,按升序正常排序。 如果你不知道怎么做,你可以在网络上搜索bubble sortselection sort等,但前两个很容易实现。
  • 一旦你有了这个工作,只需将排序修改为仅适用于奇数。

不必对任何或所有数组进行预排序,然后再对值进行操作(尽管在准备过程中过滤和排序较小数组的成本可能比对较大数组进行排序具有性能优势)

这是一个使用Stream API 的绝妙解决方案。

public static int[] sortOdds(int[] a) {
    var sortedOdds = Arrays.stream(a).filter(v -> v % 2 == 1).sorted().toArray();
    for (int i = 0, s = 0; i < a.length; i++) {
        if (a[i] % 2 == 1) {
            a[i] = sortedOdds[s];
            s++;
        }
    }
    return a; // A return here is kind of redundant but whatever.
}

但是,正如@Yunnosch 所提到的,这对于堆栈溢出来说确实不是一个好问题。 这感觉像是一个家庭作业问题,如果我怀疑任何教授都会接受上面的解决方案,因为它使用sorted()而不是实际实现排序算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM