如何合并两个相同大小的排序数组?

时间:2015-03-13 05:20:58

标签: java

第一阵列:{3,5,6,9,12,14,18,20,25,28}
第二个数组:{30,32,34,36,38,40,42,44,46,48}

示例输出:

{3,5,6,9,12,14,18,20,25,28,30,32,34,36,38,40,42,44,46,48}

我必须将第一个数组合并到第二个数组中。第二个数组有空间来容纳所有值

4 个答案:

答案 0 :(得分:1)

使用System.arraycopy将a1追加到a2

System.arraycopy(a1, 0, a2, a2_len, a1.length);

然后是Arrays.sort

答案 1 :(得分:1)

每当我知道我需要一个要排序的集合时,我使用的方法会在正确的位置插入新元素,因此当它没有排序时,集合将永远不会有状态...在你的情况下你可能会很好地添加两个到目标集合然后使用Collections.sort()但你也可以sortedInsert() ...你可以创建你的集合并使用这个方法开始添加所有项目,当你完成后你不需要另一个电话到Collections.sort()因为集合总是处于排序状态...如果你经常进行单个元素更新并且不希望整个集合被使用,这很方便...这将有更好的性能...

以下是我为List做的事情

/**
   * Inserts the value keeping collection sorted, provided collections shall be sorted with provided
   * comparator
   */
  public static <E> void sortedInsert(List<E> list, E value, Comparator<? super E> comparator) {
    assert Ordering.from(comparator).isOrdered(list);

    if (list.size() == 0) {
      list.add(value);
    } else if (comparator.compare(list.get(0), value) > 0) {
      list.add(0, value);
    } else if (comparator.compare(list.get(list.size() - 1), value) < 0) {
      list.add(list.size(), value);
    } else {
      int i = 0;
      while (comparator.compare(list.get(i), value) < 0) {
        i++;
      }
      list.add(i, value);
    }
  }

答案 2 :(得分:0)

ArrayList对象设为arrayListObject

ArrayList<Integer> arrayListObject= new ArrayList<>();

arrayListObject

中添加两个数组的元素

执行Collectios.sort(arrayListObject)对元素进行排序。

使用

Integer list2[] = new Integer[arrayListObject.size()];
        list2 =  arrayListObject.toArray(list2);

获取结果数组

答案 3 :(得分:0)

使用两个指针/计数器,i&amp; j从0开始到数组大小。比较a[i]&amp; b[j]并基于结果转换ij(类似于合并排序,合并步骤)。如果不允许额外的空间,那么在最坏的情况下(在输入中是这样,第一个数组中的所有元素都小于第二个数组中的第一个元素),每次比较元素时,可能必须移动第二个数组。 / p>