Yhdistämislajittelun toteuttaminen C ++: ssa esimerkkien avulla



Tämä artikkeli antaa sinulle yksityiskohtaisen ja kattavan tiedon yhdistämislajittelusta C ++: ssa, miten se toimii esimerkkien kanssa.

Mikä on yhdistämistapa? Yhdistä lajittelu on vertailupohjainen lajittelualgoritmi, joka kuuluu jakamis- ja valloitusluokkaan. Yhdistä lajittelua käytetään taulukon lajittelemiseen jakamis- ja valloitusstrategian perusteella, jota käsitellään lyhyesti tässä viestissä yhdessä muiden käsitteiden, kuten algoritmin ja esimerkin kanssa. Tarkastelemme myös yhdistämislajittelun ajan monimutkaisuutta C ++: ssa

Seuraavat vihjeet käsitellään tässä artikkelissa,





Siirrytään tähän artikkeliin Yhdistä lajittelu C ++ -sovelluksessa

kuinka käyttää loggeria Java - sovelluksessa

Divide and Conquer -algoritmi

Jos olet jo perehtynyt quicksortin toimintaan, saatat olla tietoinen jakamisen ja valloittamisen strategiasta. Divide and Conquer sisältää kolme päävaihetta. Harkitsemme näiden vaiheiden ymmärtämistä taulukosta Hei [], jolla on alkuindeksi ”a” ja loppuindeksi ”n”, joten voimme kirjoittaa taulukon seuraavalla tavalla Hei [a & hellip..n]



Divide - Jaa ja valloita pääliike tai päävaihe on jakaa annettu ongelma alaongelmiin tai alaosiin. Saalis on, että alaongelmien tulisi olla samanlaisia ​​kuin alkuperäiset ja pienemmät. Meidän tapauksessamme jaamme matriisimme kahteen puolikkaaseen [a & hellip.m] [m + 1 & hellip..n] m on keskellä a ja n -indeksiä

Valloita - Kun olemme valmiit jakamaan ongelmamme alaongelmiksi. Ratkaisemme nämä ongelmat rekursiivisesti.

Yhdistä - Tässä vaiheessa yhdistämme kaikki alaongelmien ratkaisut sopivalla tavalla. Toisin sanoen yhdistämme 2 erilaista lajiteltua taulukkoa yhdeksi lajitelluksi taulukoksi. Siellä meillä on lajiteltu joukko.



Siirrytään tähän artikkeliin Yhdistä lajittelu C ++ -sovelluksessa

Yhdistämisen lajittelualgoritmin ymmärtäminen esimerkillä

Tässä vaiheessa tiedämme, mitä lähestymistapaa yhdistämislajittelu käyttää. Tarkastellaan siis esimerkkiä ja käydään läpi kaikki vaiheet Hellosta [] lajittelematta lajiteltuun ryhmään.
Esimerkki - Hei [10, 3, 7, 1, 15, 14, 9, 22]

Merge-sort-in-C++

mitä nukke on devopsissa

Yllä olevassa kuvassa tarkastelimme lajittelematonta taulukkoa ja käytimme yhdistämislajittelua lajitellun taulukon saamiseksi. Katsotaan nyt kutakin vaihetta ja ymmärretään koko algoritmi

1. Ensinnäkin harkitsimme taulukkoa Hei [10, 3, 7, 1, 15, 14, 9, 22] tässä taulukossa on yhteensä 8 elementtiä

2. Kuten aiemmin havaitsimme, yhdistämislajittelu käyttää jakamisen ja valloituksen lähestymistapaa elementtien lajittelussa. Löysimme m, joka sijaitsee keskellä matriisi ja jakoimme matriisi keskeltä, jossa m = (a - n) / 2 'a' on vasemmanpuoleisen elementin indeksi ja n on matriisimme oikeanpuoleisen elementin indeksi .

3. Ensimmäisen jaon jälkeen meillä on 2 osaa, joista kukin koostuu 4 elementistä. Katsotaanpa alkupuoliskoa [10, 3, 7, 1].

4. Jaamme [10, 3, 7, 1] 2 osaan [10, 3] ja [7, 1]. Sen jälkeen jaamme ne edelleen ryhmiin [10], [3], [7], [1]. Lisäjako ei ole mahdollista, koska emme voi laskea m. luettelo, joka sisältää yhden elementin, katsotaan aina lajitelluksi.

5. Kuinka sulautuminen tapahtuu? Otetaan selvää. Ensin [10] ja [3] verrataan ja yhdistetään nousevassa järjestyksessä [3, 10] samalla tavalla kuin saamme [1, 7]

6. Sen jälkeen verrataan [3, 10] ja [1, 7]. Kun verrataan, yhdistämme ne nousevassa järjestyksessä ja saamme [1, 3, 7, 10].

7. [15, 14, 9, 2] myös jaetaan ja yhdistetään samalla tavalla muodostaen [9, 14, 15, 22].

8. Viimeisessä vaiheessa verrataan ja yhdistetään [15, 14, 9, 2] [9, 14, 15, 22], jotta saadaan lajiteltu taulukkots. [1, 3, 7, 9, 10, 14, 15, 22].

Siirrytään tähän artikkeliin Yhdistä lajittelu C ++ -sovelluksessa

Pseudocode for Merge Sort

Aloita, jos jätät

Funktio mergeSort () kutsuu itsensä rekursiivisesti jakamaan matriisimme, kunnes siitä tulee yksi elementti ja funktioiden yhdistämistä () käytetään lajiteltujen taulukoiden yhdistämiseen.

Siirrytään tähän artikkeliin Yhdistä lajittelu C ++ -sovelluksessa

Yhdistä lajitteluohjelma C ++: een

#include #include #include nimitilan käyttäminen std void merge (int a [], int Firstindex, int m, int Lastindex) // yhdistää alaryhmät, jotka luodaan jako void mergeSort (int a [], int Firstindex, int Lastindex) {if (Firstindexkoko int Hei [koko], olen cout<<'Enter the elements of the array one by one:n' for(i=0 i>Hei [i] mergeSort (Hei, 0, koko - 1) cout<<'The Sorted List isn' for(i=0 i

Tuotos-

Siirrytään tähän artikkeliin Yhdistä lajittelu C ++ -sovelluksessa

java jäsennä merkkijono tähän mennessä

Ajan monimutkaisuus

Ajan monimutkaisuus on tärkeä näkökohta, joka on otettava huomioon, kun puhumme algoritmeista. Yhdistämisen lajittelulla katsotaan olevan suuri ajan monimutkaisuus verrattuna muihin lajittelualgoritmeihin.

Pahimmassa tapauksessa käyntiaika - O (n log n)
Paras tapa-aika - O (n log n)
Keskimääräinen käyntiaika - O (n log n)

Tämän avulla olemme päässeet loppuun tämän yhdistämislajittelun C ++ -artikkelissa. Jos haluat oppia lisää, tutustu Edureka, luotettava verkko-oppimisyritys. Edurekan Java J2EE- ja SOA-koulutus- ja sertifiointikurssit on suunniteltu kouluttamaan sekä ydin- että edistyneitä Java-konsepteja sekä erilaisia ​​Java-kehyksiä, kuten Hibernate & Spring.

Onko sinulla kysymys meille? Mainitse se tämän blogin kommenttiosassa ja otamme sinuun yhteyttä mahdollisimman pian.