我需要对输入数组中的奇数进行排序。所以我们对数组中的偶数不做任何处理但对奇数按升序排序
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()
而不是实际实现排序算法。