Johdatus yhdistämiseen Järjestä JavaScriptillä
Lajittelualgoritmit ovat erittäin tärkeitä tietotekniikassa. Lajittelun lähtö on järjestää luettelon elementit tiettyyn järjestykseen (joko nousevaan tai laskevaan). Yhdistä lajittelu JavaScript-muodossa on yksi tehokkaimmista saatavilla olevista lajittelualgoritmeista, koska se perustuu jaon ja valloitusten käsitteeseen. Kuten nimestä voi päätellä, jaa iso ongelma ensin pieniin ongelmiin kuin ratkaise pienempiin ongelmiin suuremman ongelman ratkaisemiseksi. Konseptuaalisesti yhdistämislajittelu on yhdistelmä kahdesta perusalgoritmista, nimeltään MERGE ja MERGE_SORT.
joka toimii seuraavasti:
- Jaa lajittelematon luettelo n määrään yksikohtaisia alaluetteloita (n on lajittelemattoman luettelon elementtien kokonaismäärä).
- Yhdistä alaluettelot toistuvasti lajiteltuihin alaluetteloihin, kunnes lajiteltua luetteloa on vain yksi.
Yhdistämisjärjestyksen toteutus JavaScript-muodossa
MERGE-algoritmi noudattaa menettelyä kahden lajitellun luettelon yhdistämiseksi yhdeksi lajiteltuksi luetteloksi.
Esimerkki: Oletetaan, että on olemassa kaksi luetteloa, ts. Lista 1 (1, 5, 3) ja Lista 2 (7, 2, 9).
1. Lajittele ensin molemmat luettelot.
Nyt näemme ja sovellamme siihen E-tekniikkaa.
2. Sitten luomme uuden luettelon koon x + y, missä x on luettelon 1 elementtien lukumäärä ja y on luettelon 2 elementtien lukumäärä.
Tapauksessamme x = 3 ja y = 3, joten x + y = 6.
3. Nyt meillä on kaksi osoitinta.
Ensimmäinen osoitin luettelon 1 ensimmäiseen sijaintiin ja toinen osoitin luettelon 2 ensimmäiseen kohtaan.
4. Sitten vertaamme molempien osoittimien arvoa. Pienemmällä arvolla oleva osoitin, kopioi tämä elementti luetteloon 3 ja siirrä osoitin oikealla puolella luettelolle, jolla on pienempi arvo ja tulosluettelo (eli luettelo 1 ja luettelo 3).
5. Suorita samalla tavalla vaihe 4 uudelleen ja uudelleen.
Edelleen liikkuminen …
Huomautus : Jos yksi luetteloista (eli luettelo 1 tai luettelo 2) kulkee täysin, kuten tapauksessasi, kopioi toisen luettelon koko sisältö osoittimesta tulosluetteloon (eli luettelo 3) seuraavasti.
pseudokoodi
Function merge (sublist1, sublist2) (
Create var for result list
While sublist1 length > 0 and sublist2 length > 0
If sublist1(0) < sublist2(0) Copy the sublist1 pointer value to result list and Shift pointer of sublist1 to right
else
Copy the sublist2 pointer value to result list and Shift pointer of sublist2 to right
Return concat sublist1 or sublist2 (depending if node1 is empty or not)
MERGE_SORT-algoritmi jakaa annetun lajittelemattoman luettelon minimikokoon ja kutsuu sitten MERGE-algoritmia yhdistämään luettelon uuteen lajiteltuun luetteloon.
pseudokoodi
function mergeSort(list) (
If list length < 2
Return list
Create var for middle index of list
Create var for left index of list
Create var for right index of list
Recursively call mergeSort function
)
esimerkki
Täällä seuraamme ylhäältä alas yhdistämislajittelua. Se alkaa ylhäältä ja etenee alaspäin, ja jokainen rekursiivinen käännös esittää saman kysymyksen ”Mitä luettelon järjestämiseksi on tehtävä?” Ja vastauksena on “Jaa luettelo kahteen osaan, soita rekursiivinen puhelu ja yhdistä tulokset”.
Koodi Javascriptissa
// Split the list into halves and merge them recursively
function mergeSort (list) (
if (list.length < 2) (
return list;// return once we hit a list with a single element
)
var mid = Math.floor(list.length / 2);
var left = mergeSort(list.slice(0, mid));
var right = mergeSort(list.slice(mid));
return merge(left, right);
)
// compare the lists element by element and return the concatenated resultList
function merge (sublist1, sublist2) (
var resultList = ();
while (sublist1.length > 0 && sublist2.length > 0)
resultList.push(sublist1(0) < sublist2(0)? sublist1.shift() : sublist2.shift());
return resultList.concat(sublist1.length? sublist1 : sublist2);
)
const list = (6, 5, 3, 1, 8, 7, 2, 4, 2, 5, 1, 2, 3) console.log(mergeSort(list)) //( 1, 1, 2, 2, 2, 3, 3, 4, 5, 5, 6, 7, 8 )
Yhdistämislajittelun päätoiminto jakaa annetun luettelon pienemmiksi luetteloiksi jokaisessa rekursiivisen puhelun iterauksessa. Muista, että rekursio vaatii perusolosuhteet äärettömän toistumisen välttämiseksi. Tapauksessamme meillä on:
if (list.length < 2) (
return list;// return once we hit a list with a single element
)
Kun olemme asettaneet rekursion perusedellytykset, tunnistamme keskimmäisen hakemiston jakaa annettu luettelo vasempaan ja oikeaan alaluetteloon, kuten yllä olevasta esimerkki kaaviosta näet. Sitten meidän on yhdistettävä vasen alaluettelo ja oikea alaluettelo, jota tarkastelemme nyt. Yllä olevassa yhdistämistoiminnossa meidän on varmistettava, että lajittelemme kaikki vasemman alaluettelon ja oikean alaluettelon elementit. lista. Tapa, jolla teemme tämän, on käyttämällä jonkin aikaa silmukkaa. While-silmukassa verrataan vasemman alaluettelon ja oikean alaluettelon elementtejä yksitellen. Voimme työntää pienemmän näistä kahdelta tulosluetteloon ja siirtää vasemman alaluettelon ja oikean alaluettelon kohdistinta vastaavasti. Lopuksi meidän on yhtenäistettävä tulosluettelo. Tämä on hyvin tärkeää! Jos emme tee tätä viimeistä vaihetta täällä, meillä on epätäydellinen luettelo elementeistä lopussa, koska silmukkaolosuhteet epäonnistuvat, kun jompikumpi kahdesta osoittimesta saavuttaa lopun.
lähtö:
Yhdistelmälajittelun ominaisuudet
- Yhdistämislajittelu on vakaa, koska taulukon sama elementti ylläpitää alkuperäisiä asentojaan toisiinsa nähden.
- Yhdistämislajittelu ei ole "paikoillaan", koska yhdistämisen aikana se luo kopion koko luettelosta. Tästä johtuen tämän algoritmin tilan monimutkaisuus (O (n)) on tosiasiallisesti suurempi kuin toiset, eikä sitä tule käyttää monimutkaisissa ongelmissa, joissa tila on huippuluokkaa.
- Merge-lajittelun yleinen aikakompleksi on O (nLogn). Se on tehokkaampaa, koska se on pahimmassakin tapauksessa, ajonaika on O (nlogn).
johtopäätös
Yhdistämislajikkeiden parhaat, pahimmat ja keskimääräiset tapaukset ovat samat, mikä tekee siitä tehokkaamman algoritmin. Se toimii nopeammin kuin muut lajittelutekniikat. Yhdistämislajittelua voidaan soveltaa minkä tahansa kokoisiin tiedostoihin. Se on erittäin rinnakkaistettava, koska käytetään "jaa ja vallitse" -menetelmää. Vahvien tietotekniikan perusteiden kehittämiseksi kehotetaan ymmärtämään perusteellisesti erilaiset lajittelualgoritmit.
Suositeltava artikkeli
Tämä on opas Yhdistä Lajittele JavaScriptillä. Tässä keskustellaan Johdanto yhdistämisjärjestelystä JavaScript-muodossa ja toteutuksesta sekä ominaisuuksista. Voit myös käydä läpi muiden ehdotettujen artikkeleidemme saadaksesi lisätietoja -
- JavaScript-matematiikan toiminnot
- Johdanto JavaScriptiin
- Paras Javascript-kehys
- JavaScript-työkalut
- Kuusi suosituinta lajittelualgoritmia JavaScriptissä