【问题标题】:Sort only even numbers in array and do not touch odds仅对数组中的偶数进行排序,不要触及赔率
【发布时间】:2019-05-14 15:15:41
【问题描述】:

所以我有一个整数数组,练习告诉我只对偶数元素进行排序。我知道这可以通过简单检查每个元素来轻松实现,这可能是 O(n^2)。
我要做的是编写一个只接受偶数作为参数的比较器,然后用它对整个数组进行排序。

Comparator<Integer> comp = new Comparator<>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            return o1.compareTo(o2);
        }
    };
Arrays.sort(array, comp));

有什么办法吗? 谢谢你

【问题讨论】:

  • 奇数应该留在他们的索引?
  • @MuratKaragöz 是的,没错
  • 在这种情况下,我真的会选择自定义冒泡/插入排序,而不是使用比较器和使用的 sort 方法。
  • @dbl 我不确定我是否有自定义排序,相反,我会提取事件,使用内置排序,然后将它们放回去

标签: java arrays sorting


【解决方案1】:
Arrays.sort(array, (a, b) -> Integer.compare(a%2, b%2));

上述函数使用自定义比较函数进行排序,仅对偶数进行排序。

【讨论】:

    【解决方案2】:
    public static void sortEven(int[] inputArray) {
        List list = new ArrayList();
        for (int i = 0; i < inputArray.length; i++) {
            if (inputArray[i]%2== 0)
                list.add(inputArray[i]);
        }
        Collections.sort(list);
        int j=0;
        for (int i = 0; i < inputArray.length; i++) {
            if (inputArray[i]%2== 0){
                inputArray[i] = Integer.parseInt(list.get(j).toString());
            j++;}
        }
    
        for (int i = 0; i < inputArray.length; i++) {
            System.out.println(inputArray[i]);
        }
    }
    

    【讨论】:

      【解决方案3】:

      我不会尝试创建这样的Comparator。实现它似乎更麻烦。相反,您可以将数组拆分为奇数和偶数。 用ArrayList#add(index,number)对偶数进行排序并将奇数添加到它们之前的位置

      【讨论】:

      • 而这样做,你必须存储奇数的索引?
      • @Shved 保留旧列表并对其进行迭代。检查奇数并将其添加到具有当前索引的新排序偶数列表中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      相关资源
      最近更新 更多