Gabungan Gabungan adalah algoritma penyortiran yang efektif berdasarkan operasi penggabungan. Algoritma ini adalah aplikasi pembagian dan penaklukan yang sangat khas.
Gabungkan metode penyortiran adalah untuk menggabungkan dua (atau lebih dari dua) tabel yang dipesan ke dalam tabel yang dipesan baru, yaitu membagi urutan yang akan diurutkan menjadi beberapa setelah, masing -masing setelah dipesan. Kemudian yang dipesan berikutnya digabungkan ke dalam urutan yang dipesan secara keseluruhan.
Gabungan penyortiran adalah algoritma penyortiran yang efektif berdasarkan operasi penggabungan. Algoritma ini adalah aplikasi pembagian dan penaklukan yang sangat khas. Gabungkan yang diperintahkan berikutnya untuk mendapatkan urutan yang benar -benar dipesan; Jika dua tabel yang dipesan digabungkan menjadi satu meja yang dipesan, itu disebut gabungan 2 arah.
Proses operasi gabungan adalah sebagai berikut:
1. Oleskan untuk ruang sehingga ukurannya adalah jumlah dari dua urutan yang diurutkan, yang digunakan untuk menyimpan urutan yang digabungkan
2. Atur dua pointer, posisi awal adalah posisi awal dari dua urutan yang diurutkan masing -masing
3. Bandingkan elemen yang ditunjuk oleh dua pointer, pilih elemen yang relatif kecil dan masukkan ke dalam ruang gabungan, dan pindahkan pointer ke posisi berikutnya
4. Ulangi Langkah 3 sampai pointer mencapai ujung urutan
5. Salin semua elemen yang tersisa dari urutan lain langsung ke akhir urutan gabungan
Contoh 1:
Salinan kode adalah sebagai berikut:
/**
* Gabungan, juga dikenal sebagai algoritma gabungan, mengacu pada operasi menggabungkan dua urutan yang diurutkan menjadi satu urutan.
* Algoritma penyortiran gabungan tergantung pada operasi gabungan.
*
* Proses operasi gabungan adalah sebagai berikut:
*
* 1. Oleskan untuk ruang sehingga ukurannya adalah jumlah dari dua urutan yang diurutkan, yang digunakan untuk menyimpan urutan yang digabungkan
* 2. Setel dua pointer, posisi awal adalah posisi awal dari dua urutan yang diurutkan masing -masing
* 3. Bandingkan elemen yang ditunjukkan oleh dua pointer, pilih elemen yang relatif kecil dan masukkan ke dalam ruang gabungan, dan pindahkan pointer ke posisi berikutnya
* 4. Ulangi Langkah 3 sampai pointer mencapai ujung urutan
* 5. Salin semua elemen yang tersisa dari urutan lain langsung ke akhir urutan yang digabungkan
*
*/
function mergeSort (item) {
if (items.length <2) {
membalas item;
}
var middle = math.floor (items.length / 2),
kiri = item.slice (0, tengah),
kanan = item.slice (tengah),
params = gabungan (mergeSort (kiri), mergeSort (kanan));
params.unshift (0, items.length);
item.splice.Apply (item, params);
membalas item;
function gabungan (kiri, kanan) {
var result = [],
il = 0,
ir = 0;
while (il <left.length && ir <right.length) {
if (kiri [il] <kanan [ir]) {
result.push (kiri [IL ++]);
} kalau tidak {
result.push (kanan [IR ++]);
}
}
return result.concat (left.slice (IL)) .concat (right.slice (IR));
}
}
// tes
var arr = [2, 1, 3, 12, 5, 66, 23, 87, 15, 32];
Mergesort (ARR);
Contoh 2:
Salinan kode adalah sebagai berikut:
<type skrip = "Teks/JavaScript">
//document.write("------------------------------------------- -------------------------------------------------- -------------------------
// var array = array baru (12, 25, 32, 16, 18, 27, 59, 69, 36);
var count = 0;
// Panggil metode sortir untuk menyortir
// msort (array, array, 0, array.length - 1);
// Sumber array
// Array target TEST
// S Mulai Subskrip
// Subskrip ttarget
fungsi msort (sumber, dest, s, t) {
var result = "";
var m; // ambil nilai menengah
var dest2 = array baru ();
if (s == t) {
dest [s] = sumber [s];
}
kalau tidak {
m = math.floor ((s + t) / 2);
msort (sumber, dest2, s, m);
msort (sumber, dest2, m+1, t);
gabungan (dest2, dest, s, m, t);
/* Hasil output*/
hasil += "<br /> thread" +++ count +"Hasil pemesanan melalui pass adalah:";
untuk (var n = 0; n <dest.length; n ++) {
hasil + = array [n] + ",";
}
/* Hasil output berakhir*/
}
hasil pengembalian;
}
/* Hasil output berakhir*/
// menyatu dua array secara berurutan dari kecil ke besar
// Sumber Array Asli
// DESS sorted array
// Subskrip pertama
// m Tabel berikut dari array kedua
// panjang ntotal
Fungsi gabungan (sumber, dest, s, m, n) {
untuk (var j = m+1, k = s; j <= n && s <= m; k ++) {
if (sumber [s] <sumber [j]) {
dest [k] = sumber [s ++];
}
kalau tidak {
dest [k] = sumber [j ++];
}
}
// Tambahkan sisa array yang dipesan ke ujung Dest
if (s <= m) {
untuk (var l = 0; l <= m - s; l ++) {
dest [k + l] = sumber [s + l];
}
}
if (j <= n) {
untuk (var l = 0; l <= n - j; l ++) {
dest [k + l] = sumber [j + l];
}
}
}
//document.write("<br /> <br /> ")
</script>