[英]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);
得到結果數組
使用兩個指針/計數器, i
和j
從0開始到數組的大小。 比較a[i]
和b[j]
並基於結果移位i
或j
(類似於合並排序,合並步驟)。 如果不允許額外的空間,那么在最壞的情況下(這在您的輸入中是正確的,第一個數組中的所有元素都小於第二個數組中的第一個元素),您可能必須在每次比較元素時都將第二個數組移位。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.