Uvod v Razvrsti spajanje v JavaScript

Algoritmi za razvrščanje so v računalništvu zelo pomembni. Rezultat razvrščanja je razporeditev elementov seznama v določen vrstni red (naraščajoč ali padajoč). Združitev Razvrsti v JavaScript je eden najučinkovitejših razpoložljivih algoritmov, saj temelji na konceptu delitve in osvajanja. Kot že ime pove, najprej razdelite večji problem na manjše težave, kot pa da rešite manjše, da boste rešili večji problem. V konceptualnem smislu je vrsta združevanja kombinacija dveh osnovnih algoritmov, imenovanih MERGE in MERGE_SORT.

ki deluje na naslednji način:

  1. Nortortni seznam razdelite na n število podštevilk z enim elementom (n je skupno število elementov na nerazvrščenem seznamu).
  2. Sezname večkrat združite v razvrščene sezname, dokler ni le enega razvrščenega seznama.

Izvajanje vrste združevanja v JavaScript

Algoritem MERGE sledi postopku združevanja dveh razvrščenih seznamov v en razvrščen seznam.

Primer: Recimo, da obstajata dva seznama, tj. Seznam 1 (1, 5, 3) in Seznam 2 (7, 2, 9).

1. Najprej razvrstite oba seznama.

Zdaj bomo videli in uporabili tehniko E na njej.

2. Nato bomo ustvarili nov seznam velikosti x + y, kjer je x število elementov na seznamu 1 in y je število elementov na seznamu 2.

V našem primeru je x = 3 in y = 3, torej x + y = 6.

3. Zdaj imamo dva kazalca.
Prvi kazalec, ki kaže na prvi položaj seznama 1, in drugi kazalec, ki kaže na prvi položaj seznama 2.

4. Nato bomo primerjali vrednost obeh kazalcev. Kazalec z manjšo vrednostjo kopirajte ta element na Seznam 3 in premaknite kazalec na desno od seznama z manjšo vrednostjo in iz njega izpisanih seznamov (tj. Seznama 1 in seznama 3)

5. Podobno ponovite korak 4 znova in znova.

Nadaljnje potovanje… ..

Opomba : Če se kateri koli od seznamov (tj. Seznama 1 ali seznama 2) v celoti premakne kot v primeru, kopirajte celotno vsebino drugega seznama s kazalca na seznam rezultatov (tj. Seznam 3), kot sledi.

Psevdokod

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)

Algoritem MERGE_SORT deli dani neortirani seznam na najmanjšo velikost in nato pokliče algoritem MERGE, da seznam združi v nov razvrščen seznam.

Psevdokod

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
)

Primer

Tu sledimo izvajanju Razvrsti združitve od zgoraj navzdol. Začne se na vrhu in nadaljuje navzdol, z vsakim rekurzivnim zavojem si zastavi isto vprašanje »Kaj je potrebno storiti za razvrščanje seznama?« In ima odgovor: »Seznam razdelite na dva, izvedite rekurzivni klic in združite rezultati “.

Koda v Javascript

// 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 )

Glavna funkcija sorte združevanja bo dani seznam razdelila na manjše sezname v vsaki ponovitvi rekurzivnega klica. Ne pozabite, da rekurzija zahteva osnovno stanje, da se izognete neskončni rekurziji. V našem primeru imamo:

if (list.length < 2) (
return list;// return once we hit a list with a single element
)

Ko postavimo osnovni pogoj za rekurzijo, bomo identificirali srednji indeks, da damo seznam na levi in ​​desni podpis, kot lahko vidite zgoraj na primernem diagramu. Nato moramo združiti levi podpis in desni podpis, ki si ga bomo ogledali zdaj. V zgornji funkciji spajanja moramo poskrbeti, da bomo razvrstili vse elemente na levem podlistku in desnem podvrstu. seznam. Način, kako bomo to storili, je z uporabo zanke za čas. V zanki while bomo primerjali element na levem pod-seznamu in element v desnem pod-seznamu drug za drugim. Manjšega od obeh lahko potisnemo na seznam rezultatov in ustrezno premaknemo kazalec levega in desnega podvrsta. Končno moramo združiti seznam rezultatov. To je zelo pomembno! Če tu ne naredimo tega zadnjega koraka, bomo imeli na koncu nepopoln seznam elementov, ker stanje zanke medtem ko ne bo uspelo, ko kateri koli od obeh kazalcev pride do konca.

Izhod:

Lastnosti združitve razvrstitve

  1. Razvrstitev združevanja je stabilna, saj isti element v nizu ohranja svoje prvotne položaje drug glede drugega.
  2. Razvrstitev združitve ni 'na mestu', saj med združevanjem ustvari kopijo celotnega seznama. Zaradi tega je kompleksnost prostora (O (n)) tega algoritma pravzaprav večja od drugih in ga ne smemo uporabljati v kompleksnih težavah, kjer je prostor vrhunski.
  3. Skupna časovna zapletenost sorte Merge je O (nLogn). Učinkovitejši je, saj je tudi v najslabšem primeru, čas izvajanja je O (nlogn).

Zaključek

Najboljše združitve, najslabše in povprečne časovne zahtevnosti so enake, zaradi česar je bolj učinkovit algoritem. Deluje hitreje kot druge tehnike sortiranja. Razvrsti spajanje je mogoče uporabiti za datoteke katere koli velikosti. Zaradi uporabe metode razdelite in osvojite je zelo vzporedljiva. Za razvoj močnih osnov računalništva vam svetujemo, da temeljito razumete različne algoritme razvrščanja.

Priporočeni članek

To je vodnik za združitev Razvrsti v JavaScript. Tukaj razpravljamo o uvedbi razvrstitve združevanja v JavaScript in izvedbi skupaj z lastnostmi. Če želite izvedeti več, lahko preberete tudi druge naše predlagane članke -

  1. JavaScript matematične funkcije
  2. Uvod v JavaScript
  3. Najboljši okviri Javascript
  4. Orodja JavaScript
  5. Najboljših 6 algoritmov za razvrščanje v JavaScript