[英]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 sort
、 selection 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.