Uvod u sortiranje algoritama u JavaScript-u

Slično kao u većini ostalih programskih jezika, možete naići na scenarije u kojima neke brojeve u JavaScriptu morate sortirati prema rastućem ili silaznom redoslijedu. Da bismo to postigli, možemo koristiti mnoge algoritme kao što su Bubble sortiranje, Sortiranje odabira, Sortiranje sortiranja, Quicksort itd. Ovi se algoritmi ne samo razlikuju u načinu rada, već i svaki ima svoje različite zahtjeve u pogledu memorije i vremena, kopajte dublje u neke od važnih algoritama sortiranja i pogledajte kako ih možete koristiti u svom JavaScript kodu.

Najboljih 6 algoritam za razvrstavanje u JavaScript

Evo nekoliko algoritama za razvrstavanje u JavaScript-u koji su objašnjeni u nastavku s primjerima:

1. Algoritam mjerenja mjehurića

Smatra se jednim od najčešćih alata ove trgovine, Bubble razvrstavanje stvara stvaranje petlje koja svaku stavku u nizu uspoređuje s drugom stavkom. Ako je usporedeni predmet manji od onoga na ruci, zamjenjujemo njihova mjesta. To traje sve dok ne prođemo prolaz gdje nijedna stavka u nizu nije veća od stavke koja se nalazi pored nje.

Bubble Sort ima O (n 2 ) vremensku složenost i O (n) složenost prostora.

Kodirati:

function swap(arr, firstIndex, secondIndex)(
var temp = arr(firstIndex);
arr(firstIndex) = arr(secondIndex);
arr(secondIndex) = temp;
)
function bubbleSortAlgo(arraaytest)(
var len = arraaytest.length,
i, j, stop;
for (i=0; i < len; i++)(
for (j=0, stop=len-i; j < stop; j++)(
if (arraaytest(j) > arraaytest(j+1))(
swap(arraaytest, j, j+1);
)
)
)return arraaytest;
)
console.log(bubbleSortAlgo((3, 6, 2, 5, -75, 4, 1)));

Izlaz:

2. Algoritam izbora sortiranja

Sad kad smo završili s raspravljanjem o algoritmu sortiranja mjehurića, pogledajmo samo kao popularan algoritam za sortiranje nazvan Selection Sort.

Za razliku od Bubble Sort, mi se usredotočujemo na pronalaženje najmanje vrijednosti u nizu da bismo dovršili sortiranje. Slijedi detaljna obrada načina sortiranja izbora:

  • Pretpostavljamo da je prva stavka u nizu najmanja.
  • Usporedimo ovu stavku sa sljedećom stavkom u nizu.
  • Ako je sljedeća stavka manja od one koja je pri ruci, sljedeću stavku postavljamo kao novu najmanju vrijednost.
  • Nastavljamo ponavljati ove korake dok ne dođemo do kraja niza.
  • Kad pronađemo vrijednost u nizu koji je manji od onog s kojim smo započeli, mijenjamo njihove pozicije.
  • Nastavljamo s uspoređivanjem i prelazimo na sljedeću stavku. Dok se cijeli niz ne razvrsta.

Kao i algoritam Razvrstavanje mjehurića, sorta Selection ima O (n 2 ) vremensku složenost i O (n) složenost prostora.

Kodirati:

function SelectionSortAlgo(array, compare_Function) (
function comp(a, b) (
return a - b;
)
var min = 0;
var index = 0;
var temp = 0;
compare_Function = compare_Function || compare;
for (var i = 0; i < array.length; i += 1) (
index = i;
min = array(i);
for (var j = i + 1; j < array.length; j += 1) (
if (compare_Function(min, array(j)) > 0) (
min = array(j);
index = j;
)
)
temp = array(i);
array(i) = min;
array(index) = temp;
)
return array;
)
console.log(SelectionSortAlgo((9, 15, 2, 44, -1, 36, 1), function(a, b) ( return a - b; )));

Izlaz:

3. Algoritam spajanja sortiranja

Slično sortiranju i odabiru mjehurića mjehurića, Razvrstavanje sortiranja jedan je od popularnih algoritama sortiranja u računalnoj znanosti, možete ga implementirati u većini programskih jezika i ima dobre performanse bez da su suviše potrebni resursi.

Spajanje razvrstavanja koristi metodu Dijeljenje i osvajanje kako bi se sortirali niz ili bilo koji popis elemenata. Izraz dijeli i osvaja znači da jedan veliki problem dijelimo na nekoliko manjih problema i tada rješavamo te male probleme. Nakon rješavanja manjih problema, kombiniramo rezultate koji rezultiraju rješavanjem velikog problema.

Razumijevanje algoritma zapravo je jednostavno:

  • Dijeljeni niz podijelimo na n polja, a svaki od tih nizova sadrži samo 1 element.
  • Spajanje nizova da biste proizveli novi niz.
  • Ponavljajte korak 2 dok ne ostane samo jedan niz koji će biti sortirani niz.

Kodirati:

function merge_sort_algo(left, right)
(
var i = 0;
var j = 0;
var result = ();
while (i < left.length || j < right.length) (
if (i === left.length) (
// j is the only index left_part
result.push(right(j));
j++;
)
else if (j === right.length || left(i) <= right(j)) (
result.push(left(i));
i++;
) else (
result.push(right(j));
j++;
)
)
return result;
)
console.log(merge_sort_algo((1, 44, 6), (84, 7, 5)));

Izlaz:

4. Algoritam brzog sortiranja

Quicksort je jedan od najučinkovitijih načina razvrstavanja elemenata u računalnim sustavima. Similor za spajanje vrste, Quicksort radi na algoritmu razdvajanja i osvajanja. U ovom slučaju u nizu pronalazimo osovinu za usporedbu svih ostalih nizova elemenata sa, a zatim premještamo stavke na način da su sve stavke prije naših odabranih stožernih stavki manje, a sve stavke nakon stožerne točke veće veličine. Nakon što to učinimo, ključno je stalno ponavljati i imat ćemo svoje sortirano polje.

Slijede koraci koji se mogu poduzeti za implementaciju algoritma brzog upravljanja:

  • Odaberemo element matrice i zovemo ga "Pivot Point"
  • Pokrećemo pokazivač koji se zove lijevi pokazivač iz kojeg se nalazi prvi element u nizu.
  • Slično tome, pokrećemo pokazivač koji se zove desni pokazivač na posljednju stavku polja.
  • Ako je vrijednost elementa na lijevom pokazivaču manja u usporedbi s odabranom točkom osi, pomaknemo lijevi pokazivač ulijevo (dodajte +1) i nastavimo ponavljati sve dok vrijednost na lijevom pokazivaču ne bude veća od vrijednosti vrijednost točke tačke ili jednaka istoj.
  • Ako je vrijednost elementa na desnom pokazivaču na popisu veća od vrijednosti elementa zaokreta, pomaknemo desni pokazivač ulijevo. Ponavljajte ovo sve dok vrijednost desnog bočnog pokazivača ne bude manja (ili jednaka) vrijednosti stožera.
  • Kada je vrijednost lijevog pokazivača manja ili jednaka vrijednosti desnog pokazivača, zamijenite vrijednosti.
  • Pomaknite desni pokazivač ulijevo, lijevi pokazivač udesno.
  • Ponavljajte dok se lijevi i desni pokazivači ne susretnu.

Kodirati:

function quickSortAlgo(origArray) (
if (origArray.length <= 1) (
return origArray;
) else (
var left = ();
var right = ();
var newArray = ();
var pivot = origArray.pop();
var length = origArray.length;
for (var i = 0; i < length; i++) (
if (origArray(i) <= pivot) (
left.push(origArray(i));
) else (
right.push(origArray(i));
)
)
return newArray.concat(quickSortAlgo(left), pivot, quickSortAlgo(right));
)
)
var myArray = (13, 50, 2, 45, -1, 74, 11 );
var arreySorted = quickSortAlgo(myArray);
console.log(arreySorted);

Izlaz:

5. Algoritam sortiranja umetanja

Kad je riječ o jednostavnoj implementaciji, vrsta umetanja nadaleko je poznata kao jedan od jednostavnijih algoritama. U Postavi umetanja elementi elementa se uspoređuju i zatim poredaju određenim redoslijedom. Ovo je vrlo slično uređenju karata u palubi. Vrsta umetanja imena dolazi iz postupka odabira elementa i njegovog umetanja na njegovo ispravno mjesto, a zatim ponavljanja za sve elemente.

Evo kako algoritam radi:

  • Prvi element matrice smatra se već sortiranim.
  • Izaberite sljedeći element matrice.
  • Usporedite odabrani element sa svim elementima u nizu.
  • Pomaknite svaki element u nizu koji je veći od vrijednosti odabranog elementa.
  • Umetnite element
  • Ponavljajte korak 2 do 5 dok se niz ne razvrsta.

Kodirati:

function insertion_Sort_algo(arr)
(
for (var i = 1; i < arr.length; i++)
(
if (arr(i) < arr(0))
(
arr.unshift(arr.splice(i, 1)(0));
)
else if (arr(i) > arr(i-1))
(
continue;
)
else (
for (var j = 1; j < i; j++) (
if (arr(i) > arr(j-1) && arr(i) < arr(j))
(
arr.splice(j, 0, arr.splice(i, 1)(0));
)
)
)
)
return arr;
)
console.log(insertion_Sort_algo((44, 20, 26, 54, -9, 41, 16)));

Izlaz:

6. Algoritam heap sortiranja

Razvrstavanje u hrpi način je razvrstavanja elemenata pomoću strukture podataka "Heap". Metoda je prilično slična tehnici selekcije, o kojoj smo govorili ranije. Sada se možda pitate o Heapsu i kako su oni definirani, prije nego što prijeđemo na algoritam, da prvo razumemo skupine.

Ukratko, gomila je binarno stablo s nekim dodatnim pravilima. Jedno pravilo kaže da u hrpi, stablo mora biti cjelovito binarno stablo što jednostavno znači da je potrebno popuniti sve čvorove na trenutnoj razini prije dodavanja još jednog. Sljedeće pravilo za hrpu je da mora postojati definirani odnos djeteta i roditelja s elementima vrijednosti hrpe.

U minimalnoj gomili, vrijednost roditelja mora biti manja od svoje djece. Kao što možete pogoditi, u najvećoj gomili roditeljska vrijednost mora biti veća od djeteta.

Sada kada su definicije izostale, pogledajmo kako djeluje gomila:

  • Prvo gradimo maksimum hrpe koja osigurava da se element najviše vrijednosti nalazi na vrhu.
  • Prebacujemo gornji element s posljednjim elementom hrpe i uklanjamo gornji element iz hrpe i spremamo ga u razvrstani niz.
  • Stalno ponavljamo prvi i drugi korak dok u hrpi ne ostane samo jedan element.

Jedna stvar koju treba imati na umu je da Heapovi nisu izvorno podržani u JavaScriptu, pa moramo pribjegavati implementaciji Heapsa pomoću nizova. Složenost prostora vrste hrpa je O (1), što je izvrsno, a iako je malo složenije u odnosu na sortiranje ili umetanje sortiranja kada je u pitanju razumijevanje i primjena, mislim da su prednosti performansi to je na kraju bolje iskoristiti u veliki projekti.

Kodirati:

var arrLength;
function heapRoot(input, i) (
var left = 2 * i + 1;
var right = 2 * i + 2;
var max = i;
if (left input(max)) (
max = left;
)
if (right input(max)) (
max = right;
)
if (max != i) (
swap(input, i, max);
heapRoot(input, max);
)
)
function swap(input, index_A, index_B) (
var temp = input(index_A);
input(index_A) = input(index_B);
input(index_B) = temp;
)
function heapSortAlgo(input) (
arrLength = input.length;
for (var i = Math.floor(arrLength / 2); i >= 0; i -= 1) (
heapRoot(input, i);
)
for (i = input.length - 1; i > 0; i--) (
swap(input, 0, i);
arrLength--;
heapRoot(input, 0);
)
)
var arr = (12, 10, 22, 55, -8, 64, 14);
heapSortAlgo(arr);
console.log(arr);

Izlaz:

Zaključak

Razvrstavanje je važan dio stvaranja aplikacija i web stranica s JavaScript-om. Sada kada ste upoznati s nekim od najvažnijih algoritama da biste dobili posao, trebali biste se osjećati samouvjerenije u JS Development.

Jedna važna činjenica koju treba imati na umu o raznim sortiranjima je da se zaista ne morate previše naglasiti u vezi s algoritmom koji će se koristiti u većini slučajeva. Sada kada je računalni hardver toliko moćan, moderni procesori za telefon i Desktop neće pokvariti nikakvo znojenje u sortiranju čak stotina elemenata u nekoliko milisekundi. To su samo slučajevi u kojima ste zaglavili s sporim hardverom ili situacijama u kojima optimizirate svaki pojedini odjeljak koda gdje promjena algoritama za sortiranje može biti korisna.

Preporučeni članci

Ovo je vodič za sortiranje algoritama u JavaScript-u. Ovdje ćemo raspravljati o prvih 6 algoritama za razvrstavanje u JavaScript, zajedno s primjerima i implementacijom koda. Možete pogledati i sljedeće članke da biste saznali više -

  1. Kompajleri JavaScripta
  2. Preokrenuti u JavaScript
  3. Uvod u JavaScript
  4. Kvadrati u Javi
  5. Brzo sortiranje algoritama na Javi
  6. Nizovi u strukturi podataka
  7. C ++ algoritam | Primjeri C ++ algoritma

Kategorija: