You are on page 1of 2

Kreiranje sortiranog niza na osnovu hipa

Posle formiranja hipa potrebno je sortirati niz. Iz hipa izdvajamo i uklanjamo najvedi element koji postavljamo
na odgovarajude mesto u sortiranom nizu, Taj postupak ponavljamo dok ne uklonimo sve elemente iz hipa.
Elemente u sortiranom nizu postavljamo počev od najvedeg (na poslednjoj poziciji niza, n-1) do najmanjeg (na
prvoj poziciji u nizu, 0). Kada određujemo i-ti element sortiranog niza, u delu niza do pozicije i registrovan je
hip, a elementi od pozicije i+1 do kraja niza predstavljaju sortirani deo niza.

Ilustrujmo kako se na osnovu hipa kreira sortiran niz. Hip i sortirani niz se čuvaju u polaznom nizu. Da bismo ih
razlikovali, sivom bojom su osenčeni elementi sortiranog niza, a elementi hipa nisu osenčeni.

Izdvajamo i uklanjamo najvedi element iz hipa i upisujemo ga na odgovarajude mesto u nizu. Na poslednje
mesto u sortiranom nizu upisujemo 10, a element 2 upišemo u koren. Sada je potrebno uraditi korekciju, jer
element 2 ima potomke 7 i 3, pa ga razmenjujemo sa vedim od njih, sa elementom 7. Nastavljamo sa
korekcijom hipa jer element 2 sada ima jednog potomka čija je vrednost 4, što je vede od 2, pa se njihove
vrednosti razmenjuju. U dobijenom stablu element 2 nema nijednog potomka, tako da je korekcija završena i
dobijeno drvo (neosenčeni elementi) jeste hip.

Izdvajamo drugi po veličini element (7) sortiranog niza i korigujemo hip.

Prilikom izdvajanja tredeg po veličini elementa sortiranog niza, elementa 4, korekciju hipa nije potrebno
raditi, jer je element 3 vedi od njegovog potomka 2.
Izdvajamo preostala dva elementa sortiranog niza i tako dobijamo sortiran niz.

Kreiranje sortiranog niza od hipa je realizovano metodom izHipaUSort, a metodom hipSort realizovano je
sortiranje niza korišdenjem hipa.

void izHipaUSort(int[] a, int n)


{
int d = n; // veličina hipa
for (int i = n - 1; i >= 0; i--)
a[i] = izdvojiMax(a, ref d);
}
void hipSort(int[] a, int n)
{
// pravljenje hipa
napraviHip(a, n);
// formiranje sortiranog niza koriscenjem hipa
izHipaUSort(a, n);
}

You might also like