cari
Rumahhujung hadapan webtutorial jsMemahami algoritma isihan gabungan: Panduan pemula untuk menguasai algoritma isihan

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?

Understanding merge sort algorithm: Beginner

Jadual Kandungan

  1. Apakah itu Algoritma Isih Gabung?
  2. Cara Algoritma Isih Gabungan Berfungsi
    • Kerumitan Masa
    • Kerumitan Angkasa
  3. Pelaksanaan dalam JavaScript
  4. 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:

  1. Bahagikan: pertama sekali, cantumkan isihan bahagikan tatasusunan kepada dua bahagian
  2. Menakluk: kedua, ia menyusun setiap separuh secara rekursif
  3. 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.

Understanding merge sort algorithm: Beginner

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.

Understanding merge sort algorithm: Beginner

Langkah 2: Menggabungkan Kembali (Menakluki)

Langkah kedua ialah mula menyusun subarray tersebut dari bawah ke atas.

Understanding merge sort algorithm: Beginner

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
  1. 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
  1. 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
  1. 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
  1. 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]:

  1. 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;
  1. 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:

Understanding merge sort algorithm: Beginner

Emmanuel Ayinde

Jurutera Perisian | Penulis Teknikal | Bahagian Belakang, Pembangun Web & Mudah Alih ? | Ghairah untuk mencipta penyelesaian perisian yang cekap dan berskala. #letsconnect ?
  • GitHub
  • Linkedin
  • 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!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Ganti aksara rentetan dalam javascriptGanti aksara rentetan dalam javascriptMar 11, 2025 am 12:07 AM

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

periksa jQuery jika tarikh sahperiksa jQuery jika tarikh sahMar 01, 2025 am 08:51 AM

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

jQuery mendapatkan padding/margin elemenjQuery mendapatkan padding/margin elemenMar 01, 2025 am 08:53 AM

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

10 Tab Accordion JQuery10 Tab Accordion JQueryMar 01, 2025 am 01:34 AM

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

10 patut diperiksa plugin jQuery10 patut diperiksa plugin jQueryMar 01, 2025 am 01:29 AM

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 Debugging dengan Node dan HTTP-ConsoleHTTP Debugging dengan Node dan HTTP-ConsoleMar 01, 2025 am 01:37 AM

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 Persediaan API Carian Google CustomTutorial Persediaan API Carian Google CustomMar 04, 2025 am 01:06 AM

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

jQuery tambah bar scroll ke divjQuery tambah bar scroll ke divMar 01, 2025 am 01:30 AM

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

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

mPDF

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

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular