当前位置: 首页 > 知识库问答 >
问题:

如何在Java中对一些元素进行排序而留下其他元素?

朱淮晨
2023-03-14

我想对数组中的一些元素进行排序,但排除其他元素

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

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);
        }

    }
}

我不能完全弄清楚原始数组中奇数较低的个数在偶数之前的场景所需的逻辑。

共有1个答案

米夕
2023-03-14

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

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

以上可能不是最佳解决方案(因为在第二个数组上浪费内存,并花费时间复制前后值)-但它应该非常容易记录和测试。

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);

正如您所看到的,该算法不依赖于特定的谓词或数组/列表类型。但由于它使用IntStream和Lambda表达式,因此需要Java8或更高版本。

 类似资料:
  • 问题内容: 如何将元素列表排序为排序列表。 我使用了许多jComboBox组件,但无法正常工作。如何将此列表按升序排序? 问题答案: 你可以看看。 此模型扩展了DefaultComboBoxModel,并内置了两个附加功能: 创建模型后,将对提供的数据进行排序 在向模型添加新项目时将数据添加到模型,这些项目将被插入以维持排序顺序 默认排序顺序将是添加到模型中的项目的自然排序顺序。但是,您可以通过指

  • 因此,我有一个,下面的字符串作为元素: null null

  • 在C++中,给定两个值a,b使得a<=b,x等于a或b,如何有效地得到另一个值y(如果a==b,最终等于x)?

  • 主要内容:算法总结及实现,优化算法在实际开发中,有很多场景需要我们将数组元素按照从大到小(或者从小到大)的顺序排列,这样在查阅数据时会更加直观,例如: 一个保存了班级学号的数组,排序后更容易分区好学生和坏学生; 一个保存了商品单价的数组,排序后更容易看出它们的性价比。 对数组元素进行排序的方法有很多种,比如冒泡排序、归并排序、选择排序、插入排序、快速排序等,其中最经典最需要掌握的是「冒泡排序」。 以从小到大排序为例,冒泡排序的整体

  • 我创建了一个To-Do-List程序,记录用户输入的任务。对于每个任务,用户必须输入名称、日期等。 当用户从菜单中选择“5”时,程序会按这些任务的日期对它们进行排序。我需要根据任务的日期和时间的升序对所有任务进行排序,即日期和时间较早的任务会排在日期和时间较晚的任务之前,并显示排序后的列表。 然而,当我运行代码时,我会收到以下错误: 下面是我到目前为止的代码:(在底部)

  • 本文向大家介绍jQuery拖动元素并对元素进行重新排序,包括了jQuery拖动元素并对元素进行重新排序的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery拖动元素并对元素进行重新排序的实现方法,分享给大家供大家参考,具体实现内容如下 效果图: 具体内容如下: 从上图可以看出我们今天要实现的功能。当用户拖动一个图片时,就能改变图片的已有排序并更新表中的排列顺序。比如用户可以随意拖动我