gpt4 book ai didi

java - 如何在 Java 中对某些元素进行排序并保留其他元素?

转载 作者:太空狗 更新时间:2023-10-29 22:33:52 24 4
gpt4 key购买 nike

我希望对数组中的某些元素进行排序但排除其他元素。

举一个简单的例子,一个包含整数的数组,我想对奇数进行排序,但将偶数留在原处。

到目前为止,我有以下内容:

public class MyClass {
public static void main(String args[]) {
int temp;
int array[] = {5, 3, 2, 8, 1, 4};

int[] sortedArray = new int[array.length];
for (int j = 0; j < array.length - 1; j++) {
for (int x = 0; x < array.length - 1; x++) {
if (array[x] > array[x + 1] && array[x] % 2 != 0 && array[x + 1] % 2 !=0) {
temp = array[x];
array[x] = array[x + 1];
array[x + 1] = temp;
sortedArray = array;
}
}
}
for (int i: sortedArray) {
System.out.println(i);
}

}
}

Given integer array: 5, 3, 2, 8, 1, 4

Output of the code: 3, 5, 2, 8, 1, 4

Expected output: 1, 3, 2, 8, 5, 4

无法完全弄清楚原始数组中较低的奇数出现在偶数之前的场景所需的逻辑。

最佳答案

一个简单的暴力解决方案:

  • 迭代输入数组,并检索所有奇数
  • 将奇数收集到一个新的、更小的数组中
  • 对该数组进行排序
  • 现在再次遍历初始数组:每当找到奇数时,就从奇数数组中选择“下一个”条目

以上可能不是最佳解决方案(因为在第二个数组上浪费了内存,并且花费时间来回复制值)- 但它应该 super 简单 写下来测试。

理论上,您也可以“原地”执行此操作。意思是:您可以创建一个包含 int 数组的类 - 但它为其用户提供了一个仅显示奇数 int 数组的 View

示例实现(感谢 Daniel Foerster ):

public static int[] sortFiltered(int[] src, IntPredicate predicate) {
int[] filtered = IntStream.of(src).filter(predicate).sorted().toArray();
int[] dst = new int[src.length];
for (int i = 0, j = 0; i < src.length; i++) {
dst[i] = predicate.test(src[i]) ? filtered[j++] : src[i];
}
return dst;
}

使用奇数过滤器调用:

sortFiltered(array, (n) -> n % 2 != 0);

如您所见,该算法不依赖于特定的谓词或数组/列表类型。但是因为它使用 IntStreamLambda Expressions ,它需要 Java 8 或更新版本。

关于java - 如何在 Java 中对某些元素进行排序并保留其他元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45714171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com