java解一個比擬特別的數組歸並題。本站提示廣大學習愛好者:(java解一個比擬特別的數組歸並題)文章只能為提供參考,不一定能成為您想要的結果。以下是java解一個比擬特別的數組歸並題正文
給定兩個排序後的數組A和B,個中A的末尾有足夠的空間包容B,編寫一個辦法將B歸並到A並排序。
拿到這個題後,最直接的設法主意就是比擬A和B中的元素,並按次序拔出數組,直到遍歷完A和B中的一切元素。然則如許做會有一個欠好的處所:假如元素的拔出地位在數組A的前端,那就必需將本來的數組往後挪動。這會增長開支。然則我們可使用別的的一種方法將元素拔出數組A的末尾。如許我們不會湧現元素挪動的情形!代碼以下:
/*
* lastA:a中的現實元素數 lastB:b中的現實元素數 mergeIndex是新數組的現實空間年夜小
*/
public static void mergeOrder(int[] a, int[] b, int lastA, int lastB) {
int indexA = lastA - 1;
int indexB = lastB - 1;
int mergeIndex = lastA + lastB - 1;
while (indexA >= 0 && indexB >= 0) {
if (a[indexA] > b[indexB]) {
a[mergeIndex] = a[indexA];
mergeIndex --;
indexA --;
} else {
a[mergeIndex] = b[indexB];
mergeIndex --;
indexB --;
}
}
while (indexB >= 0) {
a[mergeIndex] = b[indexB];
mergeIndex --;
indexB --;
}
}