Uvod u sortu heap u Java

Heapsort u Javi je tehnika sortiranja na temelju usporedbe, gdje se koristi struktura podataka Binary Heap. Ovo je sortiranje gotovo isto kao i sorta odabira gdje će se odabrati najveći element i staviti na kraju te će se postupak ponoviti za sve elemente. Da bismo razumjeli Heap Sort, neka nam vidi što Binary Heap Sort u Javi.

  • Struktura podataka na temelju stabla.
  • Kompletno binarno drvo.
  • Može imati do dvoje djece.
  • Vrijednost korijenskog čvora može biti veća (Max Heap) ili Manja (Min Heap)

Kako Heap Sort djeluje na Javi?

Prije nego što prijeđemo na algoritam, da vidimo što je Heapify.

Heapify

Nakon što se stvori gomila s ulaznim podacima, svojstvo gomile možda neće biti zadovoljeno. Da bi se to postiglo, za podešavanje čvorova hrpe koristit će se funkcija koja se naziva heapify. Ako želimo stvoriti max heap, trenutni element će se usporediti s njegovom djecom i ako je vrijednost djece veća od trenutnog elementa, izmjena će se obaviti s najvećim elementom u lijevom ili desnom djetetu. Slično tome, ako je potrebno stvoriti min-heap, izmjena će se obaviti s najmanjim elementom u lijevom ili desnom djetetu. Na primjer, sljedeće je naš ulazni niz,

To možemo smatrati stablom, umjesto nizom. Prvi element bit će korijen, drugi će biti lijevo dijete korijena, treći element će biti pravo dijete korijena i tako dalje.

Da bi se gomila pretvorila u stablo, pređite je prema dnu prema gore. Budući da čvorići na listovima nemaju djecu, pogledajmo na sljedeću razinu. tj. je 5 i 7.

Možemo početi u 5 kao što je to s lijeve strane. Ovdje 5 ima dvoje djece: 9 i 4, gdje je 9 veće od roditeljskog čvora 5. Da bismo povećali roditelje, zamijenit ćemo 5 i 9. Nakon zamjene stablo će biti kao što je prikazano u nastavku.

Prijeđimo na sljedeći element 7 gdje su 8 i 2 djeca. Slično elementima 9 i 4, 7 i 8 bit će zamijenjeni kao u donjem stablu.

Konačno, 3 ima dvoje djece - 9 i 8 gdje je 9 veće među djecom i korijenom. Dakle, zamjena 3 i 9 izvršit će se kako bi korijen bio veći. Ponavljajte postupak dok se ne formira valjana hrpa kao što je prikazano u nastavku.

Algoritam za hrpu Poredajte uzlaznim redoslijedom

  1. Napravite Max Heap s ulaznim podacima
  2. Zamijenite zadnji element s najvećim elementom u hrpi
  3. Ugasi stablo
  4. Ponavljajte postupak dok se niz ne razvrsta

Algoritam za hrpu Sortiraj prema silaznom redoslijedu

  1. Napravite Min Heap s ulaznim podacima
  2. Zamijenite zadnji element s najmanjim elementom u hrpi
  3. Ugasi stablo
  4. Ponavljajte postupak dok se niz ne razvrsta

Sada ćemo pokušati sortirati gore dobivenu Heap u uzlaznom redoslijedu koristeći zadani algoritam. Prvo uklonite najveći element. tj. root i zamijenite ga posljednjim elementom.

Sada nagomilajte formirano stablo i umetnite uklonjeni element u posljednji niz kako je dolje prikazano

Opet uklonite korijenski element, zamijenite ga posljednjim elementom i pregrijte ga.

Umetnite uklonjeni element u slobodno mjesto. Sada možete vidjeti da se kraj matrice razvrstava.

Uklonite element 7 i zamijenite ga sa 2.

Ugasite stablo, kao što je prikazano u nastavku.

Ponavljajte postupak dok se niz ne razvrsta. Uklanjanje elementa 5.

Zagrijavanje stabla.

Uklanjanje elementa 4.

Ponovno gomilanje.

Napokon će se formirati ovako sortirani niz.

Primjeri za implementiranje sortiranja heap u Java

Sada ćemo vidjeti izvorni kod sortiranja heap u Java

//Java program to sort the elements using Heap sort
import java.util.Arrays;
public class HeapSort (
public void sort(int array()) (
int size = array.length; //Assigning the length of array in a variable
// Create heap
for (int i = size / 2 - 1; i >= 0; i--)
heapify(array, size, i);
//Find the maximum element and replace it with the last element in the array
for (int i=size-1; i>=0; i--) (
int x = array(0);//largest element(It is available in the root)
array(0) = array(i);
array(i) = x;
// Recursively call heapify until a heap is formed
heapify(array, i, 0);
)
)
// Heapify function
void heapify(int array(), int SizeofHeap, int i) (
int largestelement = i; // Set largest element as root
int leftChild = 2*i + 1; // index of left child = 2*i + 1
int rightChild = 2*i + 2; //index of right child = 2*i + 2
// left child is greater than root
if (leftChild array(largestelement))
largestelement = leftChild ;
//right child is greater than largest
if (rightChild array(largestelement))
largestelement = rightChild ;
// If largestelement is not root
if (largestelement != i) (
int temp = array(i);
array(i) = array(largestelement);
array(largestelement) = temp;
// Recursive call to heapify the sub-tree
heapify(array, SizeofHeap, largestelement);
)
)
public static void main(String args()) (
int array() = (3, 5, 7, 9, 4, 8, 2);
System. out .println("Input array is: " + Arrays. toString (array));
HeapSort obj = new HeapSort();
obj.sort(array);
System. out .println("Sorted array is : " + Arrays. toString (array));
)
)

Izlaz

Zaključak

Heap Sort je tehnika sortiranja koja ovisi o strukturi podataka binarnih heap podataka. Gotovo je slična selekcijskoj vrsti i ne koristi odvojene nizove za razvrstavanje i skupljanje.

Preporučeni članak

Ovo je vodič za sortiranje gomile na Javi. Ovdje smo raspravljali o radu, sortiranju algoritma uzlaznim i silaznim redoslijedom i primjerima s uzorkom koda. Možete i proći naše druge predložene članke da biste saznali više -

  1. JavaScript matematičke funkcije
  2. Izgled u Javi
  3. Kompajleri Java
  4. Vodič za spajanje sortiranja u Javi
  5. Vodič za sortu gomile u C
  6. Primjeri sortiranja hrpe u C ++

Kategorija: