簡體   English   中英

如何合並兩個相同大小的排序數組?

[英]how to merge two sorted arrays of same size?

第一個數組: {3,5,6,9,12,14,18,20,25,28}
第2個數組: {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}

我必須將第一個數組合並到第二個數組。 第二個數組有空間容納所有值

使用System.arraycopy將a1附加到a2

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

然后Arrays.sort

每當我知道我需要對集​​合進行排序時,我都會使用一種在正確位置插入新元素的方法,因此當集合未排序時,集合將永遠不會有狀態...在您的情況下,最好將兩個添加到目標中集合,然后使用Collections.sort()但您也可以執行sortedInsert() ...您可以創建集合,並使用此方法開始將所有項目添加到其中,完成后,您無需再調用Collections.sort()因為集合始終處於排序狀態...如果您經常進行單元素更新並且不希望重新使用整個集合,這將非常方便...這將以更好的性能工作...

這是我為清單所做的

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

ArrayList對象設為arrayListObject

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

在該arrayListObject添加兩個數組的元素

執行Collectios.sort(arrayListObject)對元素進行排序。

采用

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

得到結果數組

使用兩個指針/計數器, ij從0開始到數組的大小。 比較a[i]b[j]並基於結果移位ij (類似於合並排序,合並步驟)。 如果不允許額外的空間,那么在最壞的情況下(這在您的輸入中是正確的,第一個數組中的所有元素都小於第二個數組中的第一個元素),您可能必須在每次比較元素時都將第二個數組移位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM