Diberikan dua larik A dan B yang diurutkan, yang ujung A memiliki cukup ruang untuk B, tulis metode untuk menggabungkan B ke dalam A dan mengurutkannya.
Setelah mendapatkan pertanyaan ini, ide paling langsungnya adalah membandingkan elemen di A dan B dan memasukkannya ke dalam array secara berurutan hingga semua elemen di A dan B dilintasi. Namun ada kelemahan dalam melakukan hal ini: jika posisi penyisipan elemen berada di depan larik A, larik asli harus dipindahkan ke belakang. Ini menambah biaya tambahan. Tapi kita bisa menggunakan metode lain untuk menyisipkan elemen di akhir array A. Dengan cara ini kita tidak akan membuat elemen bergerak! Kodenya adalah sebagai berikut:
Copy kode kodenya seperti berikut : /*
* lastA: jumlah sebenarnya elemen dalam lastB: jumlah sebenarnya elemen dalam b mergeIndex adalah ukuran ruang sebenarnya dari array baru
*/
public static void mergeOrder(int[] a, int[] b, int lastA, int lastB) {
int indeksA = terakhirA - 1;
int indeksB = terakhirB - 1;
int mergeIndex = lastA + lastB - 1;
sementara (indeksA >= 0 && indeksB >= 0) {
jika (a[indeksA] > b[indeksB]) {
a[mergeIndex] = a[indexA];
gabunganIndeks --;
indeksA --;
} kalau tidak {
a[mergeIndex] = b[indexB];
gabunganIndeks --;
indeksB --;
}
}
sementara (indeksB >= 0) {
a[mergeIndex] = b[indexB];
gabunganIndeks --;
indeksB --;
}
}