22
Sortiranje 1 Algoritmi i strukture podataka (450&550) Sortiranje Algoritmi i strukture podataka 2 Sadržaj Uvod Osnovne metode sortiranja Exchange sort – sortiranje zamjenom Selection sort – sortiranje odabirom Insertion sort – sortiranje umetanjem Bubble sort Shellsort Quicksort Spajanje nizova i Mergesort Redovi s prioritetom i Heapsort

Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture...Sortiranje 3 Algoritmi i strukture podataka 5 “Exchange sort” Princip rada: Kreće od prvog elementa

  • Upload
    others

  • View
    32

  • Download
    0

Embed Size (px)

Citation preview

Sortiranje

1

Algoritmi i strukture podataka (450&550)

Sortiranje

Algoritmi i strukture podataka 2

Sadržaj

Uvod

Osnovne metode sortiranja

Exchange sort – sortiranje zamjenom

Selection sort – sortiranje odabirom

Insertion sort – sortiranje umetanjem

Bubble sort

Shellsort

Quicksort

Spajanje nizova i Mergesort

Redovi s prioritetom i Heapsort

Sortiranje

2

Algoritmi i strukture podataka 3

Uvod

Sortiranje je postupak pri kojem se postojeći elementi ponovno raspoređuju po definiranom pravilu (najčešće po numeričkom ili abecednom redu)

Ključ je dio elementa po kojem se provodi sortiranje (redni broj, prezime, godina rođenja).

Ukoliko se elementi koji se sortiraju nalaze u memoriji tada se radi o internom sortiranju (internal sorting).

Sortiranje podataka koji se nalaze na diskovima ili vrpcama (količina podataka je pre velika da bi stali u memoriju) se naziva eksterno sortiranje(external sorting).

Kako bi se ocijenila efikasnost algoritma za sortiranje promatra se:

vrijeme izvršavanja algoritma

dodatna količina memorije koju koristi algoritam

Algoritmi i strukture podataka 4

Uvod

Algoritam za sortiranje je postojan (stable) ukoliko zadržava uredan raspored podataka koji imaju iste vrijednosti ključa po kojem se sortira.

Ajduković 1Bekavac 4Bonačić 5 Erceg 3Galić 1Kardum 5Miloš 4Popović 2Tomić 2Vlašić 1Vodopija 5Zrno 4

Početno stanje

Ajduković 1Vlašić 1Galić 1Tomić 2Popović 2Erceg 3Miloš 4Zrno 4Bekavac 4Bonačić 5 Vodopija 5Kardum 5

Nepostojan algoritam

Ajduković 1Galić 1Vlašić 1Popović 2Tomić 2Erceg 3Bekavac 4Miloš 4Zrno 4Bonačić 5 Kardum 5Vodopija 5

Postojan algoritam

U slučaju velikih elemenata preporuča se indirektno sortiranje:

ne premještaju se čitavi elementi nego pokazivači na te elemente.

Sortiranje

3

Algoritmi i strukture podataka 5

“Exchange sort”

Princip rada:

Kreće od prvog elementa u nizu i uspoređuje ga sa svim ostalima.

Ukoliko se naiđe na manji element mijenja se njegova vrijednost s manjim.

Postupak se ponavlja sve dok se ne sortira čitav niz.

4. 1 2 4 6 7

3. 1 2 4 7 6

2 6 4 7 1

2. 1 2 6 7 4

4 6 2 7 1

1. 4 6 2 7 1

2 6 4 7 1

1 6 4 7 2

Red izvršenja:

usporedbi: T(N) = N*(N-1)/2 => O(N) = N2

zamjene: W(N) = N*(N-1)/2 => O(N) = N2

Algoritmi i strukture podataka 6

“Bubble sort”

Metoda koja uspoređuje dva susjedna elementa i mijenja im mjesta ukoliko je uvjet zamjene zadovoljen.

Princip rada:

Krene se od kraja niza i uspoređuju se dva susjedna elementa. Ukoliko je desni manji mijenjaju im se mjesta.

Usporedba se ponavlja sve dok najmanji element ne dođe na prvu poziciju.

Nakon toga usporedba ponovo kreće od zadnjeg elementa kako bi se pravi element doveo na drugu poziciju, …

Sortiranje

4

Algoritmi i strukture podataka 7

“Bubble sort”

Red izvršenja:

usporedbi: T(N) = N*(N-1)/2 => O(N) = N2

zamjene: T(N) = N*(N-1)/2 => O(N) = N2

3. 1 2 4 6 7

2. 1 2 4 6 7

4 6 2 1 7

1 4 6 2 7

4 6 2 7 1

1. 4 6 2 7 1

4 6 1 2 7

4 1 6 2 7

4. 1 2 4 6 7

Algoritmi i strukture podataka 8

“Selection sort”

Princip rada:

Pronalazi najmanji element u nizu i zamjenjuje ga s elementom na prvoj mjestu.

Pronalazi drugi najmanji element i zamjenjuje ga s elementom na drugom mjestu.

Ponavlja postupak sve dok se ne sortira čitav niz.

4. 1 2 4 6 7

3. 1 2 4 7 6

1 6 2 7 4

2. 1 2 6 7 4

4 6 2 7 1

1. 4 6 2 7 1

Sortiranje

5

Algoritmi i strukture podataka 9

“Selection sort”

Red izvršenja:

usporedbi: T(N) = N*(N-1)/2 => O(N) = N2

zamjene: T(N) = N => O(N) = N

Nedostatak:

Vrijeme izvođenja algoritma ne ovisi o tome je li dio elemenata niza prethodno sortirani ili ne,

Pronalaženje minimalnog člana u jednom prolasku ne daje informaciju gdje bi se mogao nalaziti sljedeći minimalni element.

Prednost:

Kod sortiranja elemenata koji sadrže velike količine podataka a male ključeve – cijena viška usporedbi je puno manja, nego cijena premještanja velikih količina podataka.

Algoritmi i strukture podataka 10

“Insertion sort”

Metoda sortiranja koja sortira niz na način da sve elemente veće od promatranog pomiče za jedno mjesto desno i na taj način stvara mjesto za promatrani element.

Princip rada za i-ti (i = 1, …, N-1) element:

Uspoređuje se njegova vrijednost s vrijednošću i-1 elementa i ukoliko je X[i] < X[i-1], i-1 element se pomiče za jedno mjesto u desno,

Sljedeći se uspoređuje i-2 element i postupak se ponavlja sve dok se ne nađe element koji je < X[i]i X[i] se ubacuje iza njega.

Sortiranje

6

Algoritmi i strukture podataka 11

“Insertion sort”

Red izvršenja:

usporedbi: T(N) = N*(N-1)/2 => O(N) = N2

zamjene: W(N) = N2/2 i A(N) = N2/4

Za razliku od selection sorta red izvršavanja ovog algoritma ovisi o prethodnom rasporedu elemenata jer ako je uvjet sortiranja za neki element zadovoljen odmah se ide na sljedeći bez daljnje usporedbe.

4. 1 2 4 6 7

3. 2 4 6 7 1

2. 4 6 2 7 1

2 4 6 7 1

4 6 2 7 1

1. 4 6 2 7 1

4 6 6 7 1

4 4 6 7 1

Algoritmi i strukture podataka 12

Osnovne metode sortiranja

Sve 4 metode karakterizira:

kvadratni red izvršavanja algoritma

ne zahtijevaju dodatnu memoriju

Primjer sortiranja 500 slučajnih brojeva [0, 1000], različitim metodama

Sortiranje

7

Algoritmi i strukture podataka 13

Osnovne metode sortiranja

Sortirani elementi [0, 100>

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

exchange sort selection sort

insertion sort bubble sort

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

Algoritmi i strukture podataka 14

Osnovne metode sortiranja

Sortirani elementi [0, 200>

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

exchange sort selection sort

insertion sort bubble sort

Sortiranje

8

Algoritmi i strukture podataka 15

Osnovne metode sortiranja

Sortirani elementi [0, 300>

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

exchange sort selection sort

insertion sort bubble sort

Algoritmi i strukture podataka 16

Osnovne metode sortiranja

Sortirani elementi [0, 400>

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

exchange sort selection sort

insertion sort bubble sort

Sortiranje

9

Algoritmi i strukture podataka 17

Osnovne metode sortiranja

Sortirani elementi [0, 500>

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

Index

Vri

jed

no

st

Algoritmi i strukture podataka 18

Shellsort Nazvan je po autoru (Donald Shell) i jedan je od prvih algoritama za sortiranje čiji je

red manji od O(N2).

Osnovna ideja:

uspoređuje se (i mijenja) svaki h-ti element

h se postepeno smanjuje (do 1) što rezultira sortiranim nizom.

Original 81 94 11 96 12 35 17 95 28 58 41 75 15

h = 5 81 94 11 96 12 35 17 95 28 58 41 75 15

35 94 11 96 12 41 17 95 28 58 81 75 15

35 17 11 96 12 41 75 95 28 58 81 94 15

35 17 11 96 12 41 75 15 28 58 81 94 95

35 17 11 28 12 41 75 15 96 58 81 94 95

35 17 11 28 12 41 75 15 96 58 81 94 95

h = 3 35 17 11 28 12 41 75 15 96 58 81 94 95

28 12 11 35 15 41 58 17 94 75 81 96 95

h = 1 11 12 15 17 28 35 41 58 75 81 94 95 96

Sortiranje

10

Algoritmi i strukture podataka 19

Shellsort

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

Indeks

Vri

jed

no

st

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

h = 250

h = 7, 3, 1

h = 62

h = 125

h = 15h = 31

Primjer sortiranja niza od 500 elemenata a h se računa:

h1= N/2, h2= h1/2, … , hi= hi-1/2, … 1

Algoritmi i strukture podataka 20

Shellsort - algoritam

Sortiranje

11

Algoritmi i strukture podataka 21

Shellsort

Niz vrijednosti h (ht, ht-1,…, h1) koje se koriste kod Shellsorta se naziva niz inkrementa.

Mogući su različiti nizovi inkrementa, ali h1 mora biti 1.

Kako odabrati niz inkrementa?

Različiti nizovi su testirani i opisani u literaturi,

neki su se pokazali uspješni u praksi,

najbolji nije još pronađen!!!

Algoritmi i strukture podataka 22

Shellsort

Vrijeme izvršavanja algoritma visi o odabiru niza inkrementa.

Shellov niz - {1, … , (N/2)/2, N/2} = > O(N2) – najgori slučaj odabira niza inkrementa.

Hibbardov niz - {1, 3, 7, …, 2k-1} = > O(N3/2) – u najgorem slučaju,

O(N5/4) – u prosjeku, ali je to utvrđeno simulacijom a nitko nije uspio dokazati.

Sedgwickov niz - {1, 5, 19, 41, 109, …}, u kojem se vrijednosti generiraju po dvije formule: 9*4i-9*2i+1 i 4i-3*2i+1 (za i = 0: 9*40-9*20+1 = 1 , 40-3*20+1 = -1;za i = 1: 9*41-9*21+1 = 19, 41-3*21+1 = -1;za i = 2: 9*42-9*22+1 = 109, 42-3*22+1 = 5; …) = > O(N4/3) – u najgorem slučaju,

O(N7/6) – u prosjeku.

Sortiranje

12

Algoritmi i strukture podataka 23

Shellsort

Za primjer od 500 slučajnih brojeva:

Shellov niz = {250, 125, 62, 31, 15, 7, 3, 1}

Hibbardov niz = {255, 127, 63, 31, 15, 7, 3, 1}

Sedgwickov niz = {209, 109, 41, 19, 5, 1}

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

0

200

400

600

800

1000

1200

0 100 200 300 400 500 600

Shell i Hibbardov niz Sedgwickov niz

Algoritmi i strukture podataka 24

Quicksort

Kao što samo ime kaže ovaj je algoritam najbrži poznati algoritam za sortiranje.

Radi se o “podjeli pa vladaj” rekurzivnom algoritmu.

Za male nizove (N ≤ 20) performanse quicksorta i nisu baš dobre, zbog toga je preporuka koristiti “insertion sort” koji rezultira i sa 15% boljim performansama.

Prosječno vrijeme izvršavanja ovog algoritma je O(N*logN), najgore vrijeme izvršavanja je O(N2) – ali se lako može postići da vjerojatnost da on nastupi eksponencijalno pada.

Osnovna ideja:

Ako je broj elemenata u nizu X 0 ili 1 vrati se iz funkcije,

Odaberi bilo koji element niza kao stožer / klin (pivot) - v,

Podjeli niz X na X1 i X2 : X1 = {x S | {v} / x ≤ v}, X2 = {x S | {v} / x ≥ v },

Vrati {quickSort(X1), v, quickSort(X2)}

Sortiranje

13

Algoritmi i strukture podataka 25

Quicksort

odabir stožera

podjela

quicksortquicksort

Problem:

pravila ne definiraju jasno što se radi s elementima koji su jednaki stožeru (v).

odabir stožera,

odabir podjele elemenata.

Algoritmi i strukture podataka 26

Quicksort – odabir stožera

Krivi način:

Odabir prvog elementa u nizu kao stožera, što je u redu ako su elementi slučajno raspoređeni.

Ako su elementi djelomično sortirani na početku tada jedan podskup sadrži skoro sve elemente i rekurzivnim pozivima se situacija još pogoršava.

Siguran način:

Odabrati stožer slučajno.

Najčešće daje dobre rezultate, ali problem je “neslučajno” generiranje brojeva i brzina generiranja slučajnog broja.

Srednji od troje dijeljenje (Median-of-Three):

Najbolji stožer bi bio element koji je srednja vrijednost svih elementa polja:

Slučajno se odaberu tri elementa i računa se njihova srednja vrijednost

Uzmu se krajnji lijevi (indeks = L), krajnji desni (D) i središnji element (indeks (L+D)/2) i njihova srednja vrijednost se uzme kao stožer.

Sortiranje

14

Algoritmi i strukture podataka 27

Quicksort – odabir podjele Odabir stožera [L = 0, D = 9, S=(0+9)/2 = 4 ]

Usporede se i sortiraju L, S i D elementi i onaj sa srednjom vrijednošću postaje stožer i ide na zadnje mjesto.

8 1 4 9 6 3 5 2 7 0

L S D

Postavi se i da pokazuje na prvi, a j na predzadnji element.

Dok je i lijevo od j uspoređuju se elementi sa stožerom:

i se pomiče u desno ako je el. manji od stožera, staje ako nije;

j se pomiče u lijevo ako je el. veći od stožera, staje ako nije;

ako su se i i j zaustavili, i pokazuje na “veliki” a j na “mali” element, ti elementi mijenjaju mjesta.

0 1 4 9 8 3 5 2 7 6

i i j

0 1 4 9 8 3 5 2 7 6

i j0 1 4 2 8 3 5 9 7 6

i j

0 1 4 2 8 3 5 9 7 6

i j0 1 4 2 5 3 8 9 7 6

i j

0 1 4 2 5 3 8 9 7 6

j i Kada je i prešao desno a j lijevo, stožer

element se mijenja s elementom i.

Algoritmi i strukture podataka 28

Quicksort – odabir podjele Svi elementi s indeksom < od stožera su

manji od njega, a svi elementi čiji je indeks > stožera su veći od njega.

0 1 4 2 5 3 6 9 7 8

v

Što ako postoje vrijednosti jednake stožeru?

Trebaju li se i i j zaustaviti ako naiđu na vrijednosti jednake stožeru?

i i j se trebaju ponašati na isti način jer će inače svi elementi jednaki stožeru završiti u jednom podnizu.

Postoje dvije mogućnosti koje se razmatraju na primjeru niza s identičnim elementima:

Ukoliko se i i j zaustavljaju, biti će mnogo zamjena među istim elementima, ali u konačnici će se i i j sresti u sredini -> osnovni niz se dijeli na dva približno jednaka podniza => O(N*logN)

Ukoliko se i i j ne zaustavljaju, i će doći do kraja niza bez ijedne zamjene, ali tada stožer ostaje na zadnjem mjestu i sortiranje se opet poziva za gotovo jednako velik niz, tj. pod nizovi su vrlo različiti => O(N2)

Sortiranje

15

Algoritmi i strukture podataka 29

Quicksort – algoritam

Algoritmi i strukture podataka 30

Spajanje (merging) i Mergsort

Rekurzivni algoritam za koji je W(N*log(N)).

Osnovna ideja je spajanje dva sortirana niza (A, B).

Kako bi se smanjio broj prolazaka kroz nizove A i B (na samo jedan prolazak) njihovi elementi se u sortiranom redoslijedu kopiraju u novi niz (C).

1 13 24 26 2 15 27 38

pA pB pC

1 13 24 26 2 15 27 38 1

pA pB pC

1 13 24 26 2 15 27 38 1 2

pA pB pC

Sortiranje

16

Algoritmi i strukture podataka 31

Spajanje (merging) i Mergsort

Ukoliko se dođe do kraja jednog od nizova svi preostali elementi iz drugog niza se kopiraju.

1 13 24 26 2 15 27 38 1 2 13 15 24 26

pA pB pC

1 13 24 26 2 15 27 38 1 2 13 15 24 26 27 38

pA pB pC

Vrijeme potrebno za spajanje dva sortirana niza je linearno jer se za slučaj N elemenata radi N-1 usporedba.

Algoritmi i strukture podataka 32

Spajanje (merging) i Mergsort

Algoritam:

Za N = 1, niz je sortiran

Za N ≠ 1, niz se dijeli na dva dijela i sortiranje se rekurzivno primjenjuje na podnizove, …, sve dok se ne dođe do niza veličine 1.

Sortirani podnizovi se zatim spajaju.

24 13 26 1 2 27 38 15

24 13 26 1

24 13

24 13

13 24 1 26

1 13 24 26 2 15 27 38

1 2 13 15 24 26 27 38

Algoritam koristi “podjeli pa vladaj” strategiju.

Sortiranje

17

Algoritmi i strukture podataka 33

“Two-Way” merging algoritam

Algoritmi i strukture podataka 34

“Two-Way” merging algoritam

Sortiranje

18

Algoritmi i strukture podataka 35

Spajanje (merging) i Mergsort

Iako je red ovog algoritma O(N*logN) (kao i kod quicksorta) rijetko se koristi za sortiranja zbog sljedećih problema:

spajanje dva sortirana niza zahtijeva korištenje dodatne memorije koja je proporcionalna veličini ta dva niza,

vrijeme koje se troši na prebacivanje elemenata iz privremenog niza u originalni (to je moguće izbjeći ako se mijenja uloga privremenog i originalnog niza) .

Prednosti:

Ovaj algoritam je postojan, za razliku od quicksorta i heapsorta.

Pristupa uzastopnim elementima, pa je zgodan za sortiranje vezanih listi, gdje se može pristupati samo uzastopnim elementima.

Mergsort algoritam se koristi kao osnova algoritama za eksterno sortiranje.

Algoritmi i strukture podataka 36

Usporedba algoritama za sortiranje

Sortiranje

19

Algoritmi i strukture podataka 37

Redovi s prioritetom

Red s prioritetom je struktura koja funkcionira po FIFO principu, s razlikom da se svakom elementu dodjeljuje određeni prioritet, te elementi s većim prioritetom dolaze na početak reda.

1(p=1)

2(p=1)

3(p=1)

4(p=0)

stavi

1(p=1)

2(p=1)

3(p=1)

4(p=0)

Implementacija redova s prioritetom:

Vezane liste – novi element se dodaje na u listu ovisno o prioritetu (stvara se sortirani red), što u najgorem slučaju je O(N), a element se skida s početka liste (O(1)).

Binarno stablo pretraživanja –dodavanje i skidanje elementa je O(logN).

Binarne gomile – heap.

Algoritmi i strukture podataka 38

Redovi s prioritetom i heap Binarne gomile – heap – binarno stablo koje se puni od lijeva prema desno i sve razine

moraju u potpunosti popunjene (osim zadnje) - potpuna binarna stabla.

Kod definiranja heapa, bitno je odrediti ključ po kojem se formira stablo (heap orderproperty).

Primjer heapa koji se formira prema najmanjem ključu:

U heapu za svaki čvor X vrijedi da je ključ roditelja je manji (ili jednak) ključu tog čvora, s iznimkom root čvora koji nema roditelja.

root čvor sadrži element s najmanjim ključem.

Sortiranje

20

Algoritmi i strukture podataka 39

Heap – dodavanje elementa

Kod dodavanja elementa X na heap:

X se dodaje na iduće slobodno mjesto ako to ne narušava svojstvo heapa,

U prazni element se premješta njegov roditelj i tako se prazni element diže na višu razinu sve dok se ne nađe mjesto za X uz uvjet da je zadovoljeno pravilo heapa.

13

1621

3124

26

19 68

3265

13

1621

3124

26

19 68

3265

13

1621

24

26

19 68

3265 31

13

16

2124

26

19 68

3265 31

dodaj14

13

1614

2124

26

19 68

3265 31

Algoritmi i strukture podataka 40

Heap – brisanje elementa

Brisanje elementa u ovom slučaju znači brisanje minimalnog (root) el, tj:

stvara se prazni elementa na vrhu stabla,

briše se zadnji dodani el. a njegova vrijednost se smješta na heap:

u prazni el. ako je to moguće ili se manji od dvoje djece pomiče na prazno mjesto i stvara novo prazno mjesto,

postupak se ponavlja dok se zadnji element ne smjesti.

brisi

Sortiranje

21

Algoritmi i strukture podataka 41

Realizacija heapa pomoću niza

Heap kao potpuno binarno stablo, zbog pravilne strukture, je moguće prikazati pomoću niza i na taj način izbjeći pokazivače.

A B C D E F G H I J

0 1 2 3 4 5 6 7 8 9 10 11 12 13

Pri tome za element i u nizu vrijedi:

lijevo dijete se nalazi na poziciji 2*i,

desno dijete se nalazi na poziciji 2*i + 1,

roditelj se nalazi na poziciji i/2.

Za pronaći djecu ili roditelje nisu potrebni pokazivači nego osnovne mat. operacije.

Algoritmi i strukture podataka 42

Heapsort

Sortiranje nekog niza pomoću heapsorta podrazumijeva stavljanje elementa zadanog niza na heap (definiran po ključu po kojem želimo sortirati niz), te ponovno vraćanje elemenata u sortiranom redoslijedu.

Za niz: 97, 53, 59, 26, 41, 58, 31

Dodavanje elemenata na heap: Skidanje elemenata s heapa:

26, 31, 41, 53, 58, 59, 97

Iako je vrijeme potrebno za sortiranje niza O(N*logN) u praksi je sporiji od Shellsorta sa Shellovim nizom.

Najveći je problem što ovaj algoritam zahtijeva dodatnu memoriju, proporcionalnu veličini originalnog niza.

Sortiranje

22

Sortiranje

Kraj