


Dalam artikel kami sebelum ini, kami telah mempelajari tentang beberapa algoritma pengisihan seperti Isih Buih, Isih Pemilihan serta Isih Sisipan. Kami telah mengetahui bahawa walaupun algoritma pengisihan ini sangat mudah untuk dilaksanakan, ia tidak cekap untuk set data yang besar, yang bermaksud kami memerlukan algoritma yang lebih cekap untuk mengendalikan pengisihan set data yang besar, oleh itu pengisihan gabungan. Dalam siri ini, kita akan meneliti cara pengisihan gabungan berfungsi dan cara ia boleh dilaksanakan dalam JavaScript. Anda bersedia?
Jadual Kandungan
- Apakah itu Algoritma Isih Gabung?
-
Cara Algoritma Isih Gabungan Berfungsi
- Kerumitan Masa
- Kerumitan Angkasa
- Pelaksanaan dalam JavaScript
- Kesimpulan
Apakah Algoritma Isih Gabung?
Algoritma Isih Gabung ialah algoritma pengisihan yang sangat baik yang mengikut prinsip bahagi-dan-takluk. Tidak seperti algoritma yang lebih mudah seperti Isih Pemilihan dan Isih Buih yang membuat beberapa hantaran melalui tatasusunan yang membandingkan elemen bersebelahan, Isih Gabungan mengambil pendekatan yang lebih strategik:
- Bahagikan: pertama sekali, cantumkan isihan bahagikan tatasusunan kepada dua bahagian
- Menakluk: kedua, ia menyusun setiap separuh secara rekursif
- Gabungkan: akhir sekali, ia menggabungkan bahagian yang diisih kembali bersama
Pendekatan ini secara konsisten mengatasi prestasi algoritma O(n²) yang lebih mudah seperti Isih Pemilihan dan Isih Buih apabila berurusan dengan set data yang lebih besar.
Cara Algoritma Isih Gabungan Berfungsi
Kami telah melihat bahawa isihan gabungan berfungsi dengan menggunakan pendekatan divide-and-conquer yang popular. Di bawah ialah gambaran visual tentang cara ia berfungsi.
Sekarang kita telah melihat keajaiban, mari kita lihat cara algoritma isihan gabungan berfungsi dengan mengisih tatasusunan ini secara manual: [38, 27, 43, 3, 9, 82, 10] menggunakan pendekatan yang disebutkan di atas.
Langkah 1: Pembahagian
Langkah pertama dalam isihan cantuman ialah membahagikan tatasusunan kepada subarray, dan kemudian membahagikan setiap subarray kepada subarray dan subarray kepada subarray sehingga kita hanya mempunyai satu item dalam semua subarray.
Langkah 2: Menggabungkan Kembali (Menakluki)
Langkah kedua ialah mula menyusun subarray tersebut dari bawah ke atas.
Kerumitan Masa
Isih Gabung mencapai kerumitan masa O(n log n) dalam semua kes (terbaik, purata dan paling teruk), menjadikannya lebih cekap daripada algoritma O(n²) untuk set data yang lebih besar.
Ini sebabnya:
- Membahagi: Tatasusunan dibahagikan log n kali (setiap bahagian memotong saiz separuh)
- Penggabungan: Setiap peringkat penggabungan memerlukan n operasi
- Jumlah: n operasi × log n aras = O(n log n)
Bandingkan ini dengan:
- Isih Buih: O(n²)
- Isih Pilihan: O(n²)
- Isih Gabung: O(n log n)
Untuk susunan 1,000 elemen:
- O(n²) ≈ 1,000,000 operasi
- O(n log n) ≈ 10,000 operasi
Kerumitan Ruang
Isih Gabungan memerlukan ruang tambahan O(n) untuk menyimpan tatasusunan sementara semasa penggabungan. Walaupun ini lebih daripada ruang O(1) yang diperlukan oleh Isih Buih atau Isih Pemilihan, kecekapan masa biasanya menjadikan pertukaran ini berbaloi dalam amalan.
Pelaksanaan dalam JavaScript
// The Merge Helper Function function merge(left, right) { const result = []; let leftIndex = 0; let rightIndex = 0; while (leftIndex <h4> Memecahkan Fungsi Gabungan: </h4> <ol> <li> <strong>Persediaan Fungsi</strong>: </li> </ol> <pre class="brush:php;toolbar:false"> const result = []; let leftIndex = 0; let rightIndex = 0;
- Mencipta tatasusunan kosong untuk menyimpan hasil gabungan
- Memulakan penunjuk untuk kedua-dua tatasusunan input
- Fikirkan penunjuk ini seperti jari yang menjejaki di mana kita berada dalam setiap tatasusunan
- Logik Penggabungan Utama:
while (leftIndex
- Membandingkan elemen daripada kedua-dua tatasusunan
- Mengambil elemen yang lebih kecil dan menambahkannya pada hasil
- Menggerakkan penuding ke hadapan dalam tatasusunan yang kami ambil daripada
- Seperti memilih yang lebih kecil daripada dua kad semasa mengisih dek
- Fasa Pembersihan:
while (leftIndex
- Menambah sebarang elemen yang tinggal
- Diperlukan kerana satu tatasusunan mungkin lebih panjang daripada yang lain
- Seperti mengumpul kad yang tinggal selepas membandingkan
Fungsi Isih Gabungan Utama
function mergeSort(arr) { // Base case if (arr.length <h4> Memecahkan MergeSort: </h4> <ol> <li> <strong>Kes Asas</strong>: </li> </ol> <pre class="brush:php;toolbar:false"> if (arr.length
- Mengendalikan tatasusunan dengan panjang 0 atau 1
- Ini sudah diisih mengikut takrifan
- Bertindak sebagai titik perhentian rekursi kami
- Fasa Pembahagian:
const middle = Math.floor(arr.length / 2); const left = arr.slice(0, middle); const right = arr.slice(middle);
- Memisahkan tatasusunan kepada dua bahagian
- slice() mencipta tatasusunan baharu tanpa mengubah suai asal
- Seperti memotong dek kad separuh
- Isih dan Penggabungan Rekursif:
return merge(mergeSort(left), mergeSort(right));
- Isih setiap separuh secara rekursif
- Menggabungkan bahagian yang diisih menggunakan fungsi gabungan
- Seperti menyusun longgokan kad yang lebih kecil sebelum menggabungkannya
Contoh Panduan
Mari kita lihat bagaimana ia disusun [38, 27, 43, 3]:
- Pecahan Pertama:
// The Merge Helper Function function merge(left, right) { const result = []; let leftIndex = 0; let rightIndex = 0; while (leftIndex <ol> <li>Pecahan Kedua: </li> </ol> <pre class="brush:php;toolbar:false"> const result = []; let leftIndex = 0; let rightIndex = 0;
- Gabung Kembali:
while (leftIndex <h2> Kesimpulan </h2> <p>Merge Sort menonjol sebagai algoritma pengisihan yang sangat cekap yang konsisten berprestasi baik pada set data yang besar. Walaupun ia memerlukan ruang tambahan berbanding dengan algoritma pengisihan yang lebih mudah, kerumitan masa O(n log n) menjadikannya pilihan utama untuk banyak aplikasi dunia nyata yang prestasinya penting.</p> <p>Pengambilan utama:</p>
- Menggunakan strategi bahagi-dan-takluk
- O(n log n) kerumitan masa dalam semua kes
- Memerlukan O(n) ruang tambahan
- Algoritma pengisihan stabil
- Sangat baik untuk set data yang besar
Kekal Kemas Kini dan Terhubung
Untuk memastikan anda tidak terlepas mana-mana bahagian dalam siri ini dan berhubung dengan saya untuk lebih mendalam
perbincangan tentang Pembangunan Perisian (Web, Pelayan, Mudah Alih atau Mengikis / Automasi), data
struktur dan algoritma, dan topik teknologi menarik lain, ikuti saya di:

Emmanuel Ayinde
- GitHub
- X (Twitter)
Nantikan dan selamat mengekod ???
Atas ialah kandungan terperinci Memahami algoritma isihan gabungan: Panduan pemula untuk menguasai algoritma isihan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Penjelasan terperinci mengenai kaedah penggantian rentetan javascript dan Soalan Lazim Artikel ini akan meneroka dua cara untuk menggantikan watak rentetan dalam JavaScript: Kod JavaScript dalaman dan HTML dalaman untuk laman web. Ganti rentetan di dalam kod JavaScript Cara yang paling langsung ialah menggunakan kaedah pengganti (): str = str.replace ("cari", "ganti"); Kaedah ini hanya menggantikan perlawanan pertama. Untuk menggantikan semua perlawanan, gunakan ungkapan biasa dan tambahkan bendera global g: str = str.replace (/fi

Fungsi JavaScript mudah digunakan untuk memeriksa sama ada tarikh sah. fungsi isvaliddate (s) { var bits = s.split ('/'); var d = tarikh baru (bit [2] '/' bits [1] '/' bits [0]); kembali !! (d && (d.getmonth () 1) == bit [1] && d.getdate () == nombor (bit [0])); } // ujian var

Artikel ini membincangkan cara menggunakan jQuery untuk mendapatkan dan menetapkan margin dalaman dan nilai margin elemen DOM, terutama lokasi tertentu margin luar dan margin dalaman elemen. Walaupun ada kemungkinan untuk menetapkan margin dalaman dan luar elemen menggunakan CSS, nilai yang tepat boleh menjadi rumit. // Sediakan $ ("div.header"). css ("margin", "10px"); $ ("div.header"). css ("padding", "10px"); Anda mungkin menganggap kod ini

Artikel ini meneroka sepuluh tab jQuery yang luar biasa dan akordion. Perbezaan utama antara tab dan akordion terletak pada bagaimana panel kandungan mereka dipaparkan dan tersembunyi. Mari kita menyelidiki sepuluh contoh ini. Artikel Berkaitan: 10 JQuery Tab Plugin

Temui sepuluh plugin jQuery yang luar biasa untuk meningkatkan dinamisme dan daya tarikan visual laman web anda! Koleksi ini menawarkan pelbagai fungsi, dari animasi imej ke galeri interaktif. Mari kita meneroka alat yang berkuasa ini: Posting Berkaitan: 1

HTTP-CONSOLE adalah modul nod yang memberi anda antara muka baris arahan untuk melaksanakan arahan HTTP. Ia bagus untuk menyahpepijat dan melihat apa yang sedang berlaku dengan permintaan HTTP anda, tanpa mengira sama ada mereka dibuat terhadap pelayan web, Serv Web

Tutorial ini menunjukkan kepada anda bagaimana untuk mengintegrasikan API carian Google tersuai ke dalam blog atau laman web anda, menawarkan pengalaman carian yang lebih halus daripada fungsi carian tema WordPress standard. Ia menghairankan mudah! Anda akan dapat menyekat carian ke y

Coretan kod jQuery berikut boleh digunakan untuk menambah bar skrol apabila kandungan div melebihi kawasan elemen kontena. (Tiada demonstrasi, sila salin terus ke Firebug) // d = dokumen // w = tetingkap // $ = jQuery var contentArea = $ (ini), Wintop = contentArea.scrollTop (), docheight = $ (d) .height (), winheight = $ (w) .height (), Divheight = $ ('#c


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Dreamweaver CS6
Alat pembangunan web visual

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular
