sortiranje podataka - ruđer bošković institute

49
Sortiranje podataka Sortiranje podataka

Upload: others

Post on 23-Nov-2021

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sortiranje podataka - Ruđer Bošković Institute

Sortiranje podatakaSortiranje podataka

Page 2: Sortiranje podataka - Ruđer Bošković Institute

22

Sortiranje izboromSortiranje izborom

�� Sortiranje izborom (Sortiranje izborom (selectionselection sortsort) je vrlo jednostavan algoritam sortiranja) je vrlo jednostavan algoritam sortiranja�� Algoritam: u listi Algoritam: u listi se nañe najmanji element i on mijenja mjesto s prvim se nañe najmanji element i on mijenja mjesto s prvim

elementom liste, postupak se ponavlja za listu od druge do zadnjelementom liste, postupak se ponavlja za listu od druge do zadnje pozicije e pozicije itditd, , u svakom koraku je lista koja se sortira krau svakom koraku je lista koja se sortira kraćća za jedan elementa za jedan element

�� Primjer: 7 3 5 1 8 4 2 9 6Primjer: 7 3 5 1 8 4 2 9 61 | 3 5 7 8 4 2 9 61 | 3 5 7 8 4 2 9 61 | 2 | 5 7 8 4 3 9 61 | 2 | 5 7 8 4 3 9 61 | 2 | 3 | 7 8 4 5 9 61 | 2 | 3 | 7 8 4 5 9 61 | 2 | 3 | 4 | 8 7 5 9 61 | 2 | 3 | 4 | 8 7 5 9 61 | 2 | 3 | 4 | 5 | 7 8 9 61 | 2 | 3 | 4 | 5 | 7 8 9 61 | 2 | 3 | 4 | 5 | 6 | 8 9 71 | 2 | 3 | 4 | 5 | 6 | 8 9 71 | 2 | 3 | 4 | 5 | 6 | 7 | 9 81 | 2 | 3 | 4 | 5 | 6 | 7 | 9 81 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 91 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Page 3: Sortiranje podataka - Ruđer Bošković Institute

33

�� Zapis algoritma: ulaz je nesortirana lista aZapis algoritma: ulaz je nesortirana lista a11, , ……, a, ann , izlaz je sortirana lista, izlaz je sortirana lista1. za i = 1, 2, 1. za i = 1, 2, ……, n, n--1 radi korake 2 1 radi korake 2 –– 552. min = i2. min = i3. za j = 2, .., n radi korak 43. za j = 2, .., n radi korak 44. ako je 4. ako je aajj < a< aii min = jmin = j5. zamjeni(a5. zamjeni(aii, , aaminmin))

�� Koraci 1, 2 i 5 se ponavljaju nKoraci 1, 2 i 5 se ponavljaju n--1 puta, koraci 3 i 4 se u prvom prolazu obavljaju 1 puta, koraci 3 i 4 se u prvom prolazu obavljaju nn--1 puta, u drugom n1 puta, u drugom n--2, 2, ……, bez obzira na ulazni niz podataka. Jedini korak , bez obzira na ulazni niz podataka. Jedini korak ččiji iji broj ponavljanja se mijenja ovisno o ulaznom nizu podataka je kobroj ponavljanja se mijenja ovisno o ulaznom nizu podataka je korak 4. Najgori rak 4. Najgori slusluččaj (koji se ne moaj (koji se ne možže dogoditi) je da se korak 4 obavlja u svakom prolazu.e dogoditi) je da se korak 4 obavlja u svakom prolazu.

�� SloSložženost problema je dakle:enost problema je dakle:

�� Dakle sloDakle složženost u najgorem sluenost u najgorem sluččaju je aju je ΘΘ(n(n22))

222121

1n

1i

21max n *2

c)n

2

c(c

2

1)n(n*cn*ci*cn*c(n)T +−=

−+=+= ∑

=

Page 4: Sortiranje podataka - Ruđer Bošković Institute

44

�� U najboljem sluU najboljem sluččaju, korak 4 se ne obavi nijednom (lista je veaju, korak 4 se ne obavi nijednom (lista je većć sortirana)sortirana)�� Tada je konstanta uz sumu manja nego u najgorem sluTada je konstanta uz sumu manja nego u najgorem sluččaju, ali je ukupan broj aju, ali je ukupan broj

operacija ista funkcija od n, pa je dakle i u najboljem sluoperacija ista funkcija od n, pa je dakle i u najboljem sluččaju sloaju složženost enost algoritma algoritma ΘΘ(n(n22))

�� Iz toga slijedi da je i prosjeIz toga slijedi da je i prosječčna slona složženost algoritma enost algoritma ΘΘ(n(n22))

Page 5: Sortiranje podataka - Ruđer Bošković Institute

55

Sortiranje zamjenomSortiranje zamjenom

�� (exchange (exchange sortsort) a) algoritam: prvi ellgoritam: prvi element niza se usporeñuje sa svakim iza sebeement niza se usporeñuje sa svakim iza sebe, , kada se naiñe na manji elementkada se naiñe na manji element, o, oni zamjene mjesta i nastave se usporeñivati ni zamjene mjesta i nastave se usporeñivati preostali elementi s novim prvim elementom. Nakon prvog prolaza preostali elementi s novim prvim elementom. Nakon prvog prolaza na prvom na prvom mjestu je najmanji element. Postupak se ponavlja za drugi, mjestu je najmanji element. Postupak se ponavlja za drugi, itditd

�� Primjer: 7 3 5 1 8 4 2 9 6 Primjer: 7 3 5 1 8 4 2 9 6 3 7 5 1 8 4 2 9 63 7 5 1 8 4 2 9 61 7 5 3 8 4 2 9 6 do kraja niza se 1 7 5 3 8 4 2 9 6 do kraja niza se ne nañe manjine nañe manji1 | 7 5 3 8 4 2 9 61 | 7 5 3 8 4 2 9 61 | 5 7 3 8 4 2 9 61 | 5 7 3 8 4 2 9 61 | 3 7 5 8 4 2 9 61 | 3 7 5 8 4 2 9 61 | 2 | 7 5 8 4 3 9 61 | 2 | 7 5 8 4 3 9 61 | 2 | 5 7 8 4 3 9 61 | 2 | 5 7 8 4 3 9 61 | 2 | 4 7 8 5 3 9 61 | 2 | 4 7 8 5 3 9 61 | 2 | 3 | 7 8 5 4 9 61 | 2 | 3 | 7 8 5 4 9 61 | 2 | 3 | 5 8 7 4 9 61 | 2 | 3 | 5 8 7 4 9 61 | 2 | 3 | 4 | 8 7 5 9 61 | 2 | 3 | 4 | 8 7 5 9 6

Page 6: Sortiranje podataka - Ruđer Bošković Institute

66

1 | 2 | 3 | 4 | 7 8 5 9 61 | 2 | 3 | 4 | 7 8 5 9 61 | 2 | 3 | 4 | 5 | 8 7 9 61 | 2 | 3 | 4 | 5 | 8 7 9 61 | 2 | 3 | 4 | 5 | 7 8 9 61 | 2 | 3 | 4 | 5 | 7 8 9 61 | 2 | 3 | 4 | 5 | 6 | 8 9 71 | 2 | 3 | 4 | 5 | 6 | 8 9 71 | 2 | 3 | 4 | 5 | 6 | 7 | 9 81 | 2 | 3 | 4 | 5 | 6 | 7 | 9 81 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 91 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

�� Zapis algoritma: ulaz je nesortirana lista aZapis algoritma: ulaz je nesortirana lista a11, , ……, a, ann , izlaz je sortirana lista, izlaz je sortirana lista1. za i = 1, .., n1. za i = 1, .., n--1 radi korake 2 i 31 radi korake 2 i 32. za j = i+1, 2. za j = i+1, ……, n radi korak 3, n radi korak 33. ako je a3. ako je aii > > aajj onda zamjeni (aonda zamjeni (aii, , aajj))

�� SloSložženost algoritma: vanjska petlja se izvrenost algoritma: vanjska petlja se izvršši ni n--1 puta, 1 puta, unutranjaunutranja u prvom prolazu u prvom prolazu nn--1 puta, u drugom n1 puta, u drugom n--2, 2, ……

�� Najgori sluNajgori sluččaj: uvijek se izvraj: uvijek se izvršši zamjena u koraku 3i zamjena u koraku 3

�� Dakle sloDakle složženost je enost je ΘΘ(n(n22))

2

1)n(n*c1)-(n*ci*c1)-(n*c(n)T 21

1n

1i

21max−

+=+= ∑−

=

Page 7: Sortiranje podataka - Ruđer Bošković Institute

77

�� U najboljem sluU najboljem sluččaju niti jednom nema zamjene mjesta u koraku 3, aju niti jednom nema zamjene mjesta u koraku 3, ššto znato značči da i da je konstanta uz sumu manja nego u najgorem sluje konstanta uz sumu manja nego u najgorem sluččaju, ali je ovisnost o n istog aju, ali je ovisnost o n istog oblika, oblika, ššto znato značči da je i najbolja sloi da je i najbolja složženost enost ΘΘ(n(n22))

�� To naravno znaTo naravno značči da je i prosjei da je i prosječčna slona složženost enost ΘΘ(n(n22))

Page 8: Sortiranje podataka - Ruđer Bošković Institute

88

Sortiranje umetanjemSortiranje umetanjem

�� Sortiranje umetanjem (Sortiranje umetanjem (insertioninsertion sortsort) se vrlo ) se vrlo ččesto koristi ako broj elemenata u esto koristi ako broj elemenata u nizu nije preveliknizu nije prevelik

�� Algoritam: poAlgoritam: poččetna lista se dijeli na dva dijela, prvi veetna lista se dijeli na dva dijela, prvi većć sortiran i drugi koji treba sortiran i drugi koji treba sortirati. Na posortirati. Na poččetku je u prvom dijelu samo prvi element. U svakom koraku se etku je u prvom dijelu samo prvi element. U svakom koraku se uzima prvi element iz drugog dijela liste i umeuzima prvi element iz drugog dijela liste i umećće se u odgovarajue se u odgovarajućće mjesto u e mjesto u prvom dijelu liste. Eleprvom dijelu liste. Elementi sortiranog dijela liste usporeñuju se od zadnjeg menti sortiranog dijela liste usporeñuju se od zadnjeg prema prvomprema prvom

�� Primjer: 7 | 3 5 1 8 4 2 9 6 uzme se 3Primjer: 7 | 3 5 1 8 4 2 9 6 uzme se 33 7 | 5 1 8 4 2 9 6 uzme se 5, us3 7 | 5 1 8 4 2 9 6 uzme se 5, usporedi s 7, 3poredi s 7, 33 5 7 | 1 8 4 2 9 6 uzme se 1, us3 5 7 | 1 8 4 2 9 6 uzme se 1, usporedi s 7, 5, 3poredi s 7, 5, 31 3 5 7 | 8 4 2 9 6 uzme se 8, usp1 3 5 7 | 8 4 2 9 6 uzme se 8, usporedi s 7, ne pomioredi s 7, ne pomičče see se1 3 5 7 8 | 4 2 9 6 sad ide 4, usp1 3 5 7 8 | 4 2 9 6 sad ide 4, usporedi s 8, 7, 5, 3oredi s 8, 7, 5, 31 3 4 5 7 8 | 2 9 6 sad ide 2, usp1 3 4 5 7 8 | 2 9 6 sad ide 2, usporedi se s 8, 7, 5, 4, 3, 1oredi se s 8, 7, 5, 4, 3, 11 2 3 4 5 7 8 | 9 6 9 se usporedi 1 2 3 4 5 7 8 | 9 6 9 se usporedi s 8 i ne pomis 8 i ne pomiččee1 2 3 4 5 7 8 9 | 6 6 se usporedi s1 2 3 4 5 7 8 9 | 6 6 se usporedi s 9, 8, 7, 59, 8, 7, 51 2 3 4 5 6 7 8 91 2 3 4 5 6 7 8 9

Page 9: Sortiranje podataka - Ruđer Bošković Institute

99

�� Zapis algoritma: ulaz je nesortirana lista aZapis algoritma: ulaz je nesortirana lista a11, , ……, a, ann , izlaz je sortirana lista, izlaz je sortirana lista1. izvr1. izvršši korake 2i korake 2--4 za j=2, 4 za j=2, ……, n, n2. p=2. p=aajj3. izvr3. izvršši korak 4 za i=1, i korak 4 za i=1, ……, j, j--114. ako je a4. ako je aii > > aajj zamjeni(azamjeni(aii, , aajj))

�� SloSložženost algoritma: koraci 1 i 2 se uvijek izvrenost algoritma: koraci 1 i 2 se uvijek izvršše ne n--1 puta, koraci 3 i 4 se u 1 puta, koraci 3 i 4 se u prvom prolazu izvrprvom prolazu izvršše jednom, pa dvaput, e jednom, pa dvaput, ……, sve do n, sve do n--1 puta1 puta

�� Najgori sluNajgori sluččaj je obrnuto sortirana lista kada se u svakom koraku moraju aj je obrnuto sortirana lista kada se u svakom koraku moraju zamijeniti elementi:zamijeniti elementi:

�� Dakle sloDakle složženost je enost je ΘΘ(n(n22))�� Najbolji sluNajbolji sluččaj je kad nema zamjena elemenata, pa je konstanta uz sumu aj je kad nema zamjena elemenata, pa je konstanta uz sumu

manja, ali je opet slomanja, ali je opet složženost enost ΘΘ(n(n22))�� Pa i ovdje vrijedi da je prosjePa i ovdje vrijedi da je prosječčna slona složženost enost ΘΘ(n(n22))

2

1)n(n*c1)-(n*ci*c1)-(n*c(n)T 21

1n

1i

21max−

+=+= ∑−

=

Page 10: Sortiranje podataka - Ruđer Bošković Institute

1010

MjehuriMjehuriččastoasto sortiranjesortiranje

�� ((bubblebubble sortsort) ) –– prolazi se redom po elementima liste i svaki se usporeñuje sa prolazi se redom po elementima liste i svaki se usporeñuje sa svojim sljedbenikom, ako je vesvojim sljedbenikom, ako je većći zamjene mjesta, time je na kraju prvog i zamjene mjesta, time je na kraju prvog prolaza listom na zadnjem mjestu najveprolaza listom na zadnjem mjestu najvećći element, postupak se ponavlja za i element, postupak se ponavlja za listu skralistu skraććenu za zadnju pozicijuenu za zadnju poziciju

�� Primjer: 7 3 5 1 8 4 2 9 6 1. i 2. element Primjer: 7 3 5 1 8 4 2 9 6 1. i 2. element mijenjaju mjestamijenjaju mjesta3 7 5 1 8 4 2 9 6 2. i 3. 3 7 5 1 8 4 2 9 6 2. i 3. element mijenjaju mjestaelement mijenjaju mjesta3 5 7 1 8 4 2 9 6 3. <3 5 7 1 8 4 2 9 6 3. <--> 4.> 4.3 5 1 7 8 4 2 9 6 sad mjes3 5 1 7 8 4 2 9 6 sad mjesta mijenjaju 5. i 6.ta mijenjaju 5. i 6.3 5 1 7 4 8 2 9 6 6. <3 5 1 7 4 8 2 9 6 6. <--> 7.> 7.3 5 1 7 4 2 8 9 6 8. <3 5 1 7 4 2 8 9 6 8. <--> 9.> 9.3 5 1 7 4 2 8 6 | 9 2. prolaz: kre3 5 1 7 4 2 8 6 | 9 2. prolaz: krećće se od poe se od poččetka, kraetka, kraćća listaa lista3 1 5 7 4 2 8 6 | 9 4. <3 1 5 7 4 2 8 6 | 9 4. <--> 5.> 5.3 1 5 4 7 2 8 6 | 9 5. <3 1 5 4 7 2 8 6 | 9 5. <--> 6.> 6.3 1 5 4 2 7 8 6 | 9 7. <3 1 5 4 2 7 8 6 | 9 7. <--> 8.> 8.3 1 5 4 2 7 6 | 8 9 3. prolaz: iz3 1 5 4 2 7 6 | 8 9 3. prolaz: iznova na kranova na kraććoj listi oj listi

Page 11: Sortiranje podataka - Ruđer Bošković Institute

1111

1 3 5 4 2 7 6 | 8 9 3. <1 3 5 4 2 7 6 | 8 9 3. <--> 4.> 4.1 3 4 5 2 7 6 | 8 9 4. <1 3 4 5 2 7 6 | 8 9 4. <--> 5.> 5.1 3 4 2 5 7 6 | 8 9 6. <1 3 4 2 5 7 6 | 8 9 6. <--> 7.> 7.1 3 4 2 5 6 | 7 8 9 novi prolaz1 3 4 2 5 6 | 7 8 9 novi prolaz1 3 2 4 5 | 6 7 8 9 novi prolaz1 3 2 4 5 | 6 7 8 9 novi prolaz1 2 3 4 | 5 6 7 8 9 jo1 2 3 4 | 5 6 7 8 9 jošš 3. puta prolazi listu, iako je sortirana3. puta prolazi listu, iako je sortirana

�� Zapis algoritma: ulaz je nesortirana lista aZapis algoritma: ulaz je nesortirana lista a11, , ……, a, ann , izlaz je sortirana lista, izlaz je sortirana lista1. ponavljaj korake 21. ponavljaj korake 2--3 za i=1, 3 za i=1, ……,n,n--112. ponavljaj korak 3. za j=1, 2. ponavljaj korak 3. za j=1, ……, n, n--113. ako je 3. ako je aajj > > aajj+1+1 onda zamjeni(onda zamjeni(aajj, , aajj+1+1))

�� SloSložženost algoritma: korak 1. se uvijek ponavlja nenost algoritma: korak 1. se uvijek ponavlja n--1 puta, u prvom prolazi se 1 puta, u prvom prolazi se koraci 2. i 3. ponavljaju nkoraci 2. i 3. ponavljaju n--1 puta, pa n1 puta, pa n--2, 2, itditd..

�� Najgori sluNajgori sluččaj: u svakom koraku se vraj: u svakom koraku se vršši zamjena, najbolji slui zamjena, najbolji sluččaj je kad nema aj je kad nema nijedne zamjene; u oba slunijedne zamjene; u oba sluččaja isti je broj provjera i ovisnost o n, aja isti je broj provjera i ovisnost o n, tjtj. i . i asimptotskaasimptotska ovisnost je ista:ovisnost je ista:

)(2

1)n(n*c1)-(n*ci*c1)-(n*c(n)T 2

21

1n

1i

21pros nΘ=−

+=+= ∑−

=

Page 12: Sortiranje podataka - Ruđer Bošković Institute

1212

�� U primjeru je algoritam izvrU primjeru je algoritam izvrššio svih osam koraka iako je sortiranje bilo gotovo io svih osam koraka iako je sortiranje bilo gotovo nakon pet koraka, nakon pet koraka, tjtj, ve, većć u u ššestom koraku nije bilo nijedne zamjene mjestaestom koraku nije bilo nijedne zamjene mjesta

�� PoboljPoboljššanje algoritma: provjerava se da li je bilo zamjene u tekuanje algoritma: provjerava se da li je bilo zamjene u tekuććem koraku, em koraku, ako nije, lista je veako nije, lista je većć sortirana i algoritam zavrsortirana i algoritam završšavaava

Page 13: Sortiranje podataka - Ruđer Bošković Institute

1313

Sortiranje spajanjemSortiranje spajanjem

�� Sortiranje spajanjem (Sortiranje spajanjem (mergemerge sortsort) je algoritam sortiranja ) je algoritam sortiranja ččija je sloija je složženost manja enost manja od kvadratne od kvadratne –– O(n*O(n*lglg n)n)

�� Strategija podijeliStrategija podijeli--papa--vladajvladaj�� Primjer: (9, 2, 4, 6, 8, 1, 7, 5)Primjer: (9, 2, 4, 6, 8, 1, 7, 5)

podijeli se na dvije listepodijeli se na dvije liste(9, 2, 4, 6) (8(9, 2, 4, 6) (8, 1, 7, 5), 1, 7, 5)

podijeli se na 2 liste podijelpodijeli se na 2 liste podijeli se na 2 listei se na 2 liste(9, 2) (4, 6) (8,(9, 2) (4, 6) (8, 1) (7, 5)1) (7, 5)

podijeli na po 2 listepodijeli na po 2 liste(9) (2) (4) (6) (8) ((9) (2) (4) (6) (8) (1) (7) (5)1) (7) (5)

spajanjespajanje(2, 9) (4, 6) (1,(2, 9) (4, 6) (1, 8) (5, 7)8) (5, 7)

spajanje spajanje spajanjespajanje(2, 4, 6, 9) (2, 4, 6, 9) (1, 5, 7, 8) (1, 5, 7, 8)

spajanjespajanje(1, 2, 4, 5, 6, 7, 8, 9)(1, 2, 4, 5, 6, 7, 8, 9)

Page 14: Sortiranje podataka - Ruđer Bošković Institute

1414

�� Algoritam sortiranja spajanjem:Algoritam sortiranja spajanjem:ulaz je lista aulaz je lista a11, , ……, a, ann , izlaz sortirana lista, izlaz sortirana lista

1. podijeli listu na dva jednaka dijela1. podijeli listu na dva jednaka dijela2. sortiraj listu a2. sortiraj listu a11, , ……, a, an/2n/2

3. sortiraj listu a3. sortiraj listu an/2+1n/2+1, , ……, a, ann4. spoji liste a4. spoji liste a11, , ……, a, an/2n/2 i ai an/2+1n/2+1, , ……, a, ann

�� Algoritam spajanja dvije sortirane liste u jednu sortiranu listuAlgoritam spajanja dvije sortirane liste u jednu sortiranu listu::ulaz su dvije sortirane liste bulaz su dvije sortirane liste b11, , ……, b, bk k i ci c11, , ……, c, cll , izlaz je sortirana lista a, izlaz je sortirana lista a11, , ……, a, ak+lk+l

1. i = 1, j = 11. i = 1, j = 12. ponavljaj korak 3 sve dok je i 2. ponavljaj korak 3 sve dok je i ≤≤ k i j k i j ≤≤ ll3. ako je b3. ako je bii < < ccjj onda aonda ai+ji+j--11 = b= bii, i=i+1, ina, i=i+1, inačče ae ai+ji+j--11 = = ccjj, j=j+1, j=j+14. ponavljaj korak 5 sve dok je i 4. ponavljaj korak 5 sve dok je i ≤≤ k k 5. a5. ai+ji+j--11 = b= bii, i=i+1, i=i+16. ponavljaj korak 7 sve dok je j 6. ponavljaj korak 7 sve dok je j ≤≤ ll7. a7. ai+ji+j--11 = = ccjj, j=j+1, j=j+1

Page 15: Sortiranje podataka - Ruđer Bošković Institute

1515

�� SloSložženost algoritma spajanja: korak 1. se obavlja jednom, za svaki eenost algoritma spajanja: korak 1. se obavlja jednom, za svaki element u lement u listama izvrlistama izvrššit it ćće se jedan od blokova naredbi iz koraka 3 ili koraka 5 ili korake se jedan od blokova naredbi iz koraka 3 ili koraka 5 ili koraka 7, a 7, koji svi imaju istu konstantnu slokoji svi imaju istu konstantnu složženost koja se moenost koja se možže odozgo ogranie odozgo ograniččitiiti

�� Najgori i najbolji sluNajgori i najbolji sluččaj zahtijevaju isti broj operacija, pa su njihove sloaj zahtijevaju isti broj operacija, pa su njihove složženosti iste, enosti iste, kao i prosjekao i prosječčna slona složženost:enost:

TTprospros ≤≤ c1 + (k + l)*cc1 + (k + l)*c22 + (k + l)*c+ (k + l)*c33 = c1 + (k + l)(c= c1 + (k + l)(c22 + c+ c33))TTprospros = O(k + l)= O(k + l)

�� SloSložženost algoritma sortiranja spajanjem: za sve instance problema, enost algoritma sortiranja spajanjem: za sve instance problema, slosložženost je enost je ista (najbolji sluista (najbolji sluččaj = najgori sluaj = najgori sluččaj = prosjeaj = prosječčni sluni sluččaj)aj)

TTprospros(n) = 2 * (n) = 2 * TTprospros(n/2) + (n/2) + TTprospros(spajanje n/2 + n/2)=(spajanje n/2 + n/2)== 2 * = 2 * TTprospros(n/2) + d(n/2) + d11 * n + d* n + d22

�� RekurzijaRekurzija: : ttnn = 2 * = 2 * ttnn/2/2 + d+ d11 * n + d* n + d22

�� Uvodi se supstitucija:Uvodi se supstitucija: ntsn 2=

211

21221

2

22

2**2

**2**2 1

dds

dndtdndtts

n

n

n nnn

++=

=++=++==

Page 16: Sortiranje podataka - Ruđer Bošković Institute

1616

�� Oduzme se Oduzme se jdbajdba za nza n--1 1 ččlan od lan od jdbejdbe za nza n--ti ti ččlan:lan:ssnn = 3 * = 3 * ssnn--11 –– 2 * 2 * ssnn--22 + 2+ 2nn--1 1 * d* d11

�� Oduzme se izraz za nOduzme se izraz za n--1 1 ččlan pomnolan pomnožžen s dva od izraza za nen s dva od izraza za n--ti ti ččlan:lan:ssnn = 5 * = 5 * ssnn--11 -- 8 * 8 * ssnn--22 + 4 * + 4 * ssnn--33

�� Dobivena je homogena rekurzivna Dobivena je homogena rekurzivna jdbajdba, , ččija karakteristiija karakterističčna na jdbajdbaxx33 –– 5 * x5 * x22 + 8 * x + 8 * x -- 4 = 0 4 = 0

ima dvostruki korijen xima dvostruki korijen x1,2 1,2 = 2 i x= 2 i x3 3 = 1, pa je op= 1, pa je općće rjee rješšenje enje ssnn = C= C11 * 2* 2nn + C+ C22 * n * 2* n * 2nn + C+ C3 3 * * 11nn

�� Iz Iz ččega slijedi: ega slijedi: ttnn = C= C11 * n + C* n + C22 * n * log* n * log22 n + Cn + C33

�� ŠŠto znato značči da je prosjei da je prosječčna slona složženost algoritma O(n*enost algoritma O(n*lglg n)n)�� Nedostatak ovog algoritma sortiranja: potrebno je dodatno polje Nedostatak ovog algoritma sortiranja: potrebno je dodatno polje

Page 17: Sortiranje podataka - Ruđer Bošković Institute

1717

Sortiranje pomoSortiranje pomoćću hrpeu hrpe

�� Sortiranje pomoSortiranje pomoćću hrpe (u hrpe (heapheap sortsort) se zasniva na svojstvima posebnog apstraktnog ) se zasniva na svojstvima posebnog apstraktnog tipa podataka tipa podataka -- hrpi hrpi

�� Potpuno binarno stablo T je hrpa (Potpuno binarno stablo T je hrpa (heapheap) ako su ispunjeni uvjeti:) ako su ispunjeni uvjeti:-- ččvorovi od T su oznavorovi od T su označčeni podacima nekog tipa za koje je definiran totalni eni podacima nekog tipa za koje je definiran totalni ureñajureñaj-- neka je neka je ii bilo koji bilo koji ččvor od T. Tada je oznaka od vor od T. Tada je oznaka od ii manja ili jednaka od oznake bilo manja ili jednaka od oznake bilo kojeg djeteta od kojeg djeteta od i i –– minimalna hrpaminimalna hrpa

�� ali moali možže biti isto tako:e biti isto tako:-- neka je neka je ii bilo koji bilo koji ččvor od T. Tada je oznaka od vor od T. Tada je oznaka od ii vevećća ili jednaka od oznake bilo a ili jednaka od oznake bilo kojeg djeteta od kojeg djeteta od i i ––maksimalna hrpamaksimalna hrpa

�� Uzlazno sortiranje koje koristi minimalnu hrpu zahtjeva dodatni Uzlazno sortiranje koje koristi minimalnu hrpu zahtjeva dodatni memorijski prostor memorijski prostor za spremanje sortirane liste, pa je bolje za taj sluza spremanje sortirane liste, pa je bolje za taj sluččaj upotrijebiti maksimalnu hrpuaj upotrijebiti maksimalnu hrpu

�� Analogno, za silazno sortiranje je bolje upotrijebiti minimalnu Analogno, za silazno sortiranje je bolje upotrijebiti minimalnu hrpu jer ne zahtjeva hrpu jer ne zahtjeva dodatni memorijski prostor za spremanje elemenata sortirane listdodatni memorijski prostor za spremanje elemenata sortirane listee

Page 18: Sortiranje podataka - Ruđer Bošković Institute

1818

�� Algoritam: od ulazne liste elemenata se kreira hrpa u kojoj je vAlgoritam: od ulazne liste elemenata se kreira hrpa u kojoj je vrijednost roditelja rijednost roditelja vevećća od vrijednosti djece (maksimalna hrpa), pa a od vrijednosti djece (maksimalna hrpa), pa ćće u njoj u korijenu biti najvee u njoj u korijenu biti najvećći i element element

�� Novi se element dodaje u Novi se element dodaje u najljevijenajljevije slobodno mjesto na posljednjoj razini stabla slobodno mjesto na posljednjoj razini stabla, , te se usporeñuje njegova vrijednost s vrijednote se usporeñuje njegova vrijednost s vrijednoššćću roditelja, ako je novi element u roditelja, ako je novi element vevećći, i, zamjenjuje mjesto s roditeljem. Zatim sezamjenjuje mjesto s roditeljem. Zatim se usporeñuje vrijednost novog usporeñuje vrijednost novog elementa koji je sad na pretposljednjoj razini s njegovim trenutelementa koji je sad na pretposljednjoj razini s njegovim trenutnim roditeljem i nim roditeljem i ako je novi element veako je novi element većći, opet im se zamjenjuju mjesta, i, opet im se zamjenjuju mjesta, itditd. s. sve dok se na nekoj ve dok se na nekoj razini ne nañe roditelj koji je verazini ne nañe roditelj koji je većći od novog elementa ili novi element postane i od novog elementa ili novi element postane korijen stablakorijen stabla

�� Primjer: 7 3 5 1 8 4 2 9 6 Primjer: 7 3 5 1 8 4 2 9 6

7 7 7 7 7 7 8 8 / / / / \\ / / \\ / / \\

3 3 5 3 3 3 5 3 5 7 55 7 5/ / / / \\

1 1 1 31 3

Page 19: Sortiranje podataka - Ruđer Bošković Institute

1919

8 8 8 8 99/ / \\ / / \\ / / \\

7 5 7 7 5 7 5 8 55 8 5/ / \\ / / / / \\ / / \\ / / \\ / / \\

1 3 4 1 3 4 1 3 4 1 3 4 2 7 3 4 22 7 3 4 2//

11

99/ / \\

8 58 5/ / \\ / / \\

7 3 4 27 3 4 2/ / \\

1 6 1 6

Page 20: Sortiranje podataka - Ruđer Bošković Institute

2020

�� Efikasna i jednostavna izvedba hrpe je ona pomoEfikasna i jednostavna izvedba hrpe je ona pomoćću polja. Ako se korijen stavi u u polja. Ako se korijen stavi u element polja s indeksom 1 i elementi se slaelement polja s indeksom 1 i elementi se slažžu po razinama, tada u po razinama, tada ćće e ččvor hrpe vor hrpe na poziciji na poziciji ii imati lijevo dijete na 2imati lijevo dijete na 2ii poziciji, a desno na 2poziciji, a desno na 2ii+1+1

�� Algoritam punjenja hrpe: ulazni podaci su hrpa H s elementima hAlgoritam punjenja hrpe: ulazni podaci su hrpa H s elementima h11, , ……, h, hnn i i element x, a izlaz je hrpa Helement x, a izlaz je hrpa H’’ s n+1 elemenata s n+1 elemenata 1. stavi x u polje na poziciju h[n+1], 1. stavi x u polje na poziciju h[n+1], ii=n+1=n+12. dok je2. dok je ii > 1 i dok je h[> 1 i dok je h[ii] > h[] > h[ii/2] radi korak 3/2] radi korak 33. zamjeni(h[3. zamjeni(h[ii],h[],h[ii/2]), /2]), ii = = ii/2/2

�� SloSložženost algoritma: broj elemenata u hrpi je n, jer je hrpa potpunoenost algoritma: broj elemenata u hrpi je n, jer je hrpa potpuno binarno binarno stablo, njena visina je 1+logstablo, njena visina je 1+log22n. Algoritam zamjenjuje element s elementom n. Algoritam zamjenjuje element s elementom prethodne razine, pa se koraci 2 i 3 ponavljaju najviprethodne razine, pa se koraci 2 i 3 ponavljaju najvišše loge log22n putan puta

�� Slijedi da je sloSlijedi da je složženost u najgorem sluenost u najgorem sluččajuajuTTmaxmax(n) (n) ≤≤ cc11 + c+ c22 * log* log22n = O(n = O(lglg n)n)

�� Najbolji sluNajbolji sluččaj: dodani element odmah manji od svog roditelja: aj: dodani element odmah manji od svog roditelja: TTminmin(n) (n) ≤≤ cc11 + c+ c22 = O(1)= O(1)

�� ProsjeProsječčan sluan sluččaj: pretpostavlja se da je jednako vjerojatno da aj: pretpostavlja se da je jednako vjerojatno da ćće e novododaninovododanielement zavrelement završšiti na svakoj od razini stabla, tada je ta vjerojatnost jednaka iti na svakoj od razini stabla, tada je ta vjerojatnost jednaka 1/log1/log22n, pa je slon, pa je složženostenost

Page 21: Sortiranje podataka - Ruđer Bošković Institute

2121

)(lg)1(log*2

2

)1(log*log**

log

1**

log

1)(

22

1

222

2

12

log

1 2

1

2

nOnc

c

nnc

ncci

ncnT

n

i

pros

=++=

=+

+=+= ∑=

�� algoritam sortiranja pomoalgoritam sortiranja pomoćću hrpe: korijen, koji je najveu hrpe: korijen, koji je najvećći element u hrpi, se i element u hrpi, se zamjeni s posljednjim elementom u polju i broj elemenata hrpe sezamjeni s posljednjim elementom u polju i broj elemenata hrpe se smanji za jedan smanji za jedan, , te se element koji je sad u korijenu usporeñuje i zamjenjujete se element koji je sad u korijenu usporeñuje i zamjenjuje, kad je potrebno, sa , kad je potrebno, sa svojim potomcima sve dok se opet ne izgradi hrpa, a na posljednjsvojim potomcima sve dok se opet ne izgradi hrpa, a na posljednjoj poziciji u polju je oj poziciji u polju je zapisan najvezapisan najvećći elementi element��Primjer: praPrimjer: pražžnjenje hrpe iz prethodnog primjeranjenje hrpe iz prethodnog primjera

9 9

/ / \\8 5 9 ide8 5 9 ide na zadnje mjesto, 6 u korijen,na zadnje mjesto, 6 u korijen,

/ / \\ / / \\ preuredi se u hrpupreuredi se u hrpu7 3 4 27 3 4 2

/ / \\1 6 1 6

Page 22: Sortiranje podataka - Ruđer Bošković Institute

2222

8 8 9 9 / / \\

7 5 8 ide7 5 8 ide na predzadnje mjesto, 1 u korijen,na predzadnje mjesto, 1 u korijen,/ / \\ / / \\ preuredi se u hrpupreuredi se u hrpu

6 3 4 26 3 4 2/ /

1 1 7 7 8, 9 8, 9

/ / \\6 5 7 ide6 5 7 ide van, 2 u korijen,van, 2 u korijen,

/ / \\ / / \\ preuredi se u hrpupreuredi se u hrpu1 3 4 2 1 3 4 2

6 6 7, 8, 9 7, 8, 9 / / \\

3 5 6 ide 3 5 6 ide van, 4 u korijen,van, 4 u korijen,/ / \\ / preuredi se u hrpu/ preuredi se u hrpu

1 2 4 1 2 4

Page 23: Sortiranje podataka - Ruđer Bošković Institute

2323

5 5 6, 7, 8, 9 6, 7, 8, 9 / / \\

3 4 5 ide van, 3 4 5 ide van, 2 u korijen,2 u korijen,/ / \\ preuredi se u hrpupreuredi se u hrpu

1 2 1 2 4 4 5, 6, 7, 8, 9 5, 6, 7, 8, 9

/ / \\3 2 4 ide v3 2 4 ide van, 1 u korijen,an, 1 u korijen,

/ preur/ preuredi se u hrpuedi se u hrpu1 1

3 4, 5, 6, 7, 8, 93 4, 5, 6, 7, 8, 9/ / \\

1 2 3 ide van, 2 u korijen1 2 3 ide van, 2 u korijen

2 3, 4, 5, 6, 7, 8, 92 3, 4, 5, 6, 7, 8, 9/ 2 ide van, ostaje 1 koji ide van u za/ 2 ide van, ostaje 1 koji ide van u zadnjem korakudnjem koraku

111, 2, 3, 4, 5, 6, 7, 8, 9 1, 2, 3, 4, 5, 6, 7, 8, 9

Page 24: Sortiranje podataka - Ruđer Bošković Institute

2424

�� Algoritam praAlgoritam pražžnjenja hrpe: ulaz je hrpa H s elementima hnjenja hrpe: ulaz je hrpa H s elementima h11, , ……, h, hnn, izlaz je hrpa , izlaz je hrpa HH’’ dobivena od H izbacivanjem korijenadobivena od H izbacivanjem korijena1. zamjeni(h[1],h[n]), izbaci h[n], 1. zamjeni(h[1],h[n]), izbaci h[n], ii=1=12. radi korake 3 i 4 sve dok je 2*2. radi korake 3 i 4 sve dok je 2*i i +1 +1 ≤≤ n i h[n i h[ii] < ] < maxmax(h[2*(h[2*ii],h[2*],h[2*ii+1]+1]3. ako je h[2*3. ako je h[2*ii] > h[2*] > h[2*ii+1] zamjeni(h[+1] zamjeni(h[ii],h[2*],h[2*ii]), ]), ii=2*=2*ii4. ina4. inačče zamjeni(h[e zamjeni(h[ii],h[2*],h[2*ii+1]), +1]), ii=2*=2*ii+1+1

�� SloSložženost algoritma: algoritam mijenja promatrani element s onim na enost algoritma: algoritam mijenja promatrani element s onim na sljedesljedeććoj oj razini, pa se koraci 2 razini, pa se koraci 2 –– 4 mogu ponoviti najvi4 mogu ponoviti najvišše loge log22n putan puta

TTmaxmax(n) (n) ≤≤ cc11 + c+ c22 loglog22n = O(n = O(lglg n)n)�� U najboljem sluU najboljem sluččaju je prebaaju je prebaččeni element dobar korijen, pa je eni element dobar korijen, pa je

TTminmin(n) = c(n) = c11 + c+ c22 = O(1)= O(1)�� ProsjeProsječčan sluan sluččaj: jednako je vjerojatno da aj: jednako je vjerojatno da ćće prebae prebaččeni element zavreni element završšiti na bilo iti na bilo

kojoj razini, pa je rezultat isti kao kod punjenja hrpekojoj razini, pa je rezultat isti kao kod punjenja hrpeTTprospros(n) =O((n) =O(lglg n)n)

Page 25: Sortiranje podataka - Ruđer Bošković Institute

2525

�� Potpuni algoritam sortiranja pomoPotpuni algoritam sortiranja pomoćću hrpe: ulaz je lista au hrpe: ulaz je lista a11, , ……, a, ann, izlaz je , izlaz je sortirana listasortirana lista1. za i = 1, 1. za i = 1, ……, n radi korak 2, n radi korak 22. zovi algoritam punjenja hrpe za element a2. zovi algoritam punjenja hrpe za element aii3. za i = 1, 3. za i = 1, ……, n radi korak 4, n radi korak 44. zovi algoritam pra4. zovi algoritam pražžnjenja hrpenjenja hrpe

�� SloSložženost algoritma: za n elemenata u listi, svi koraci se izvrenost algoritma: za n elemenata u listi, svi koraci se izvrššavaju n puta, avaju n puta, slosložženosti za korake 2 i 4 enosti za korake 2 i 4 su odreñene ranijesu odreñene ranije

�� SloSložženost za prosjeenost za prosječčni sluni sluččaj za ubacivanje i praaj za ubacivanje i pražžnjenje hrpe su iste kao za njenje hrpe su iste kao za najgori slunajgori sluččaj, pa je i ovdje prosjeaj, pa je i ovdje prosječčna slona složženost O(n*enost O(n*lglg n)n)

)lg*(log**)(*)(

*log***log**

)log*()log*(

)()()(

221211

2212211

1

22122

1

11

1

max

1

max1max

nnOnneenddc

ennnednnndc

ieeiddc

iTiTcnT

n

i

n

i

n

u

pražnjenjen

i

punjenje

=++++

=++++=

=++++≤

≤++=

∑∑

∑∑

==

==

Page 26: Sortiranje podataka - Ruđer Bošković Institute

2626

�� SloSložženost za najbolji sluenost za najbolji sluččajaj

)(*)(

)()()(

111

1

1

1

11

1

min

1

min1min

nOnedc

edciTiTcnTn

i

n

i

n

i

punjenjen

i

pražnjenje

=++=

=++≤++= ∑∑∑∑====

Page 27: Sortiranje podataka - Ruđer Bošković Institute

2727

Algoritam brzog sortiranjaAlgoritam brzog sortiranja

�� Algoritam brzog sortiranja (Algoritam brzog sortiranja (quicksortquicksort) je najbr) je najbržži algoritam za sortiranje, koji u i algoritam za sortiranje, koji u prosjeku treba prosjeku treba ΘΘ(n (n lglg n n) o) operacija usporeñivanja za sortiranje niza duljine nperacija usporeñivanja za sortiranje niza duljine n

�� To je algoritam strategije podijeli pa vladaj, koji dijeli niz uTo je algoritam strategije podijeli pa vladaj, koji dijeli niz u dva dva podnizapodniza tako tako da izabere poseban element pivot (stoda izabere poseban element pivot (stožžer) i onda preuredi niz tako da se svi er) i onda preuredi niz tako da se svi elementi manji od pivota prebace na pozicije prije njega, a svi elementi manji od pivota prebace na pozicije prije njega, a svi vevećći se nalaze i se nalaze iza pivot elementa, nakon ovog koraka pivot se nalazi na mjestu iza pivot elementa, nakon ovog koraka pivot se nalazi na mjestu na kojem na kojem mora biti u sortiranom nizumora biti u sortiranom nizu

�� Postupak se rekurzivno ponavlja za ta dva Postupak se rekurzivno ponavlja za ta dva podnizapodniza (manji i ve(manji i većći od pivota)i od pivota), s, sve ve dok se ne doñe do dok se ne doñe do podnizapodniza od od 1 e1 elementalementa

�� Algoritam brzog sortiranja usporeñuje elemente u nizu pa spada uAlgoritam brzog sortiranja usporeñuje elemente u nizu pa spada u algoritme algoritme sortiranja usporeñivanjemsortiranja usporeñivanjem

�� rezultat je pokurezultat je pokuššaja ubrzavanja faze spajanja u algoritmu sortiranja spajanjem aja ubrzavanja faze spajanja u algoritmu sortiranja spajanjem ((mergemerge sortsort); ovdje je spajanje u potpunosti izbjegnuto, jer nakon ); ovdje je spajanje u potpunosti izbjegnuto, jer nakon ššto su to su elementi u elementi u podnizovimapodnizovima sortirani sortirani, z, zbog ureñenosti poljabog ureñenosti polja, svi su elementi iz , svi su elementi iz drugog drugog podnizapodniza vevećći od svakog elementa iz prvog i od svakog elementa iz prvog podnizapodniza

�� Izvedba algoritma ovisi o izboru pivot (stoIzvedba algoritma ovisi o izboru pivot (stožžer) elementa: najjednostavnija er) elementa: najjednostavnija varijanta uzima prvi element za pivot, no on se movarijanta uzima prvi element za pivot, no on se možže odrediti na bilo koji nae odrediti na bilo koji naččin in koji se mokoji se možže izrae izraččunati u O(1) vremenuunati u O(1) vremenu

Page 28: Sortiranje podataka - Ruđer Bošković Institute

2828

�� Razmotrimo sluRazmotrimo sluččaj kad je pivot prvi element u nizu. Za premjeaj kad je pivot prvi element u nizu. Za premješštanje elemenata tanje elemenata niza potrebna su dva kursora, prvi je iniciran na drugi element niza potrebna su dva kursora, prvi je iniciran na drugi element u nizu i raste, a u nizu i raste, a drugi na zadnji i padadrugi na zadnji i pada

�� KreKrećće se s prvim kursorom koji se pomie se s prvim kursorom koji se pomičče sve dok se ne nañe element vee sve dok se ne nañe element većći od i od pivota, tada se krepivota, tada se krećće od drugog kursora koji se pomie od drugog kursora koji se pomičče dok se ne nañe element e dok se ne nañe element manji od kursoramanji od kursora

�� Zamijene se mjesta ta dva elementa i nastavlja se traZamijene se mjesta ta dva elementa i nastavlja se tražženje od prvog kursoraenje od prvog kursora�� PretraPretražživanje zavrivanje završšava kad je prvi kursor iza drugoga, tada drugi kursor ava kad je prvi kursor iza drugoga, tada drugi kursor

pokazuje na poziciju na kojoj pokazuje na poziciju na kojoj ćće u sortiranom nizu biti pivot element, pa se e u sortiranom nizu biti pivot element, pa se zamijene mjesta tog elementa i pivot elementazamijene mjesta tog elementa i pivot elementa

�� Nakon toga se ponavlja postupak na dva Nakon toga se ponavlja postupak na dva podnizapodniza: za elemente prije pivot : za elemente prije pivot elementa i one iza pivot elementaelementa i one iza pivot elementa

�� Primjer: 7 3 5 1 8 4 2 9 6 , pivot je 7Primjer: 7 3 5 1 8 4 2 9 6 , pivot je 7�� KreKrećće se od poe se od poččetka, prvi element veetka, prvi element većći od 7 je 8, sa strai od 7 je 8, sa stražžnje strane prvi manji je nje strane prvi manji je

6, pa im se zamijene mjesta:6, pa im se zamijene mjesta:7 3 5 1 6 4 2 9 8 7 3 5 1 6 4 2 9 8

�� SljedeSljedećći element vei element većći od 7 je 9, odostraga prvi manji je 2. No drugi kursor je i od 7 je 9, odostraga prvi manji je 2. No drugi kursor je ispred prvog pa ovaj korak zavrispred prvog pa ovaj korak završšava. Niz se dijeli na dva dijela, od poava. Niz se dijeli na dva dijela, od poččetka do etka do drugog kursora, te od prvog kursora do krajadrugog kursora, te od prvog kursora do kraja

Page 29: Sortiranje podataka - Ruđer Bošković Institute

2929

7 3 5 1 6 4 2 || 9 87 3 5 1 6 4 2 || 9 8�� Pivot i element na koji pokazuje drugi kursor zamijene mjesta, kPivot i element na koji pokazuje drugi kursor zamijene mjesta, kako su svi ako su svi

elementi u prvoj listi manji od njega, on je na pravom mjestu i elementi u prvoj listi manji od njega, on je na pravom mjestu i vivišše ga se ne e ga se ne diradira

2 3 5 1 6 4 || 7 || 9 82 3 5 1 6 4 || 7 || 9 8�� Ponavljanje postupka na prvom Ponavljanje postupka na prvom podnizupodnizu: pivot je 2, sprijeda prvi ve: pivot je 2, sprijeda prvi većći od njega i od njega

je 3, straga prvi manji je 1je 3, straga prvi manji je 12 1 5 3 6 4 || 7 || 9 82 1 5 3 6 4 || 7 || 9 8

�� Nastavljamo: sprijeda 5, straga 1, ali je prvi kursor iza drugogNastavljamo: sprijeda 5, straga 1, ali je prvi kursor iza drugoga, pa se mijenjaju a, pa se mijenjaju pivot i element na koji pokazuje drugi kursorpivot i element na koji pokazuje drugi kursor

1 || 2 || 5 3 6 4 || 7 || 9 81 || 2 || 5 3 6 4 || 7 || 9 8�� Drugi Drugi podnizpodniz (zadnja 2 elementa): pivot je 9 prvi kursor ne nalazi ve(zadnja 2 elementa): pivot je 9 prvi kursor ne nalazi većći od njega i od njega

nego prelazi drugi kursor, pa 9 i 8 mijenjaju mjesta:nego prelazi drugi kursor, pa 9 i 8 mijenjaju mjesta:1 || 2 || 5 3 6 4 || 7 || 8 || 91 || 2 || 5 3 6 4 || 7 || 8 || 9

�� Jedini preostao niz je u sredini: pivot je 5, sprijeda nalazimo Jedini preostao niz je u sredini: pivot je 5, sprijeda nalazimo 6, straga 46, straga 41 || 2 || 5 3 4 6 || 7 || 8 || 91 || 2 || 5 3 4 6 || 7 || 8 || 9

�� Sprijeda nalazimo 6 i sad je prvi kursor iza drugog: 5 i 4 zamijSprijeda nalazimo 6 i sad je prvi kursor iza drugog: 5 i 4 zamijene mjestaene mjesta

Page 30: Sortiranje podataka - Ruđer Bošković Institute

3030

1 || 2 || 4 3 || 5 || 6 || 7 || 8 || 91 || 2 || 4 3 || 5 || 6 || 7 || 8 || 9

�� Zadnji korak: niz od 2 elementa, pivot je 4, pretraga sprijeda nZadnji korak: niz od 2 elementa, pivot je 4, pretraga sprijeda ne nalazi vee nalazi većći od i od njega nego se prvi kursor pominjega nego se prvi kursor pomičče iza drugog:e iza drugog:1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 91 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9

�� Algoritam brzog sortiranja: ulaz je lista aAlgoritam brzog sortiranja: ulaz je lista a11, , …… aann i kursori i kursori ii (po(poččetak) i etak) i jj (kraj),a (kraj),a izlaz sortirana listaizlaz sortirana lista1. k = i+1, l = j1. k = i+1, l = j2. sve dok je k <= l radi korake 3 2. sve dok je k <= l radi korake 3 –– 553. dok je ((k<=l) i (a3. dok je ((k<=l) i (aii >= a>= akk)) k = k+1)) k = k+14. dok je ((k<=l) i (a4. dok je ((k<=l) i (aii <= a<= all)) l = l)) l = l--115. ako je k < l, zamjeni(a5. ako je k < l, zamjeni(akk, a, all))6. ako je l > i zamjeni(a6. ako je l > i zamjeni(aii, a, all))7. ako je l > i 7. ako je l > i quicksortquicksort(a, i, l(a, i, l--1)1)8. ako je k < j 8. ako je k < j quicksortquicksort(a, k, j) (a, k, j)

�� Najgori sluNajgori sluččaj za ovaj algoritam: veaj za ovaj algoritam: većć sortirana lista i lista sortirana obrnutim sortirana lista i lista sortirana obrnutim rasporedom. Tada se u svakom koraku lista dijeli na rasporedom. Tada se u svakom koraku lista dijeli na podlistepodliste od jednog i nod jednog i n--1 1 elemenata elemenata

Page 31: Sortiranje podataka - Ruđer Bošković Institute

3131

�� Korak 1. ima konstantnu sloKorak 1. ima konstantnu složženost, koraci od 2. do 5. (za niz duljine n) imaju enost, koraci od 2. do 5. (za niz duljine n) imaju slosložženost cenost c11 + c+ c22 * n, a korak 6. ima konstantnu slo* n, a korak 6. ima konstantnu složženost enost

TTmaxmax(n) = (n) = TTmaxmax(n(n--1) + d1) + d11 * n + d* n + d22�� rekurzijarekurzija

ttnn = = ttnn--11 + d+ d11 * n + d* n + d22�� Oduzme se izraz za nOduzme se izraz za n--1 1 ččlan od izraza za nlan od izraza za n--ti ti ččlan i sredilan i sredi

ttnn = 2 * = 2 * ttnn--11 –– ttnn--22 + d+ d11�� Sada se opet oduzme Sada se opet oduzme jdbajdba za nza n--1 1 ččlan od lan od jdbejdbe za nza n--ti ti ččlan i izlazilan i izlazi

ttnn = 3 * = 3 * ttnn--11 –– 3 * 3 * ttnn--22 + + ttnn--33�� KarakteristiKarakterističčna na jdbajdba

xx33 –– 3 * x3 * x22 + 3 * x + 3 * x -- 1 = 01 = 0�� Jedan trostruki korijen xJedan trostruki korijen x1,2,31,2,3 = 1, pa je op= 1, pa je općće rjee rješšenje enje rekurzijerekurzije

ttnn = C= C11 * 1* 1nn + C+ C22 * n * 1* n * 1nn + C+ C33 * * nn22 * 1* 1nn

ttnn = C= C11 + C+ C22 * n + C* n + C33 * n* n22

�� Dakle, u najgorem sluDakle, u najgorem sluččaju, sloaju, složženost je O(nenost je O(n22))

Page 32: Sortiranje podataka - Ruđer Bošković Institute

3232

�� Najbolji sluNajbolji sluččaj: kada je izabrani pivot srednja vrijednost elemenata dijela laj: kada je izabrani pivot srednja vrijednost elemenata dijela liste koji iste koji se promatra, pa se lista dijeli na dva dijela jednake duljine se promatra, pa se lista dijeli na dva dijela jednake duljine

TTminmin(n) (n) ≤≤ 2 * 2 * TTminmin(n/2) + d(n/2) + d11 * n + d* n + d22�� TjTj. . rekurzijarekurzija koja se rjekoja se rješšava jeava je

ttnn ≤≤ 2 * 2 * ttnn/2/2 + d+ d11 * n + d* n + d22�� Uvodi se supstitucijaUvodi se supstitucija

�� Izraz za nIzraz za n--1 1 ččlan se oduzme od izraza za nlan se oduzme od izraza za n--ti ti ččlanlanssnn = 3 * = 3 * ssnn--11 –– 2 * 2 * ssnn--22 + d+ d11 * 2* 2nn--11

�� Od ovog izraza se dvostruka formula za nOd ovog izraza se dvostruka formula za n--1 1 ččlanlanssnn = 5 * = 5 * ssnn--11 –– 8 * 8 * ssnn--22 + 4 * + 4 * ssnn--33

ntsn 2=

211

21221

2

22

2**2

2**22**2 1

dds

ddtddtts

n

n

nn

n nnn

++=

=++=++==

Page 33: Sortiranje podataka - Ruđer Bošković Institute

3333

�� KarakteristiKarakterističčna na jdbajdba xx33 –– 5 * x5 * x22 + 8 * x + 8 * x -- 4 = 0 ima jednostruki korijen x4 = 0 ima jednostruki korijen x11 = 1 i = 1 i dvostruki korijen xdvostruki korijen x2,32,3 = 2, pa je op= 2, pa je općće rjee rješšenje enje rekurzijerekurzije

ssnn = C= C11 * 1* 1nn + C+ C22 * * 22nn + C+ C33 * n * 2* n * 2nn

ssnn = C= C11 + C+ C22 * 2* 2nn + C+ C33 * n * 2* n * 2nn

�� Povratkom iz supstitucije izlaziPovratkom iz supstitucije izlazittnn = C= C11 + C+ C22 * n + C* n + C33 * n * log* n * log22nn

�� Pa je dakle sloPa je dakle složženost u najboljem sluenost u najboljem sluččaju O(n*aju O(n*lglg n)n)�� SloSložženost prosjeenost prosječčnog slunog sluččaja: pretpostavlja se da je svaki raspored elemenata aja: pretpostavlja se da je svaki raspored elemenata

liste jednako vjerojatan. Brojat liste jednako vjerojatan. Brojat ććemo samo operacije usporeñivanja nad emo samo operacije usporeñivanja nad elementima polja (broj svih ostalih operacija ovisi o broju tih elementima polja (broj svih ostalih operacija ovisi o broju tih operacija, pa one operacija, pa one odreñuju sloodreñuju složženost algoritma). Taenost algoritma). Takoñer se pretpostavlja da su svi elementi u koñer se pretpostavlja da su svi elementi u polju razlipolju različčiti, te da je jednaka vjerojatnost izbora svakog elementa za piviti, te da je jednaka vjerojatnost izbora svakog elementa za pivotaota

�� Gleda se segment liste aGleda se segment liste amm, , ……, a, app, kako su za izbor pivot elementa svi elementi iz , kako su za izbor pivot elementa svi elementi iz segmenta jednako vjerojatni, prolaz algoritma uz izbor nekog asegmenta jednako vjerojatni, prolaz algoritma uz izbor nekog aii za pivota dijeli za pivota dijeli segment na dva dijela asegment na dva dijela amm, , ……, a, am+im+i--22 i ai am+im+i, , ……, a, app s vjerojatnos vjerojatnoššćću 1/(pu 1/(p--m+1)m+1)

�� SloSložženost u prosjeenost u prosječčnom slunom sluččaju (algoritam radi n+1 koraka prije rekurzivnog aju (algoritam radi n+1 koraka prije rekurzivnog poziva) je daklepoziva) je dakle

∑=

−+−++=

n

i

prosprospros inTiTn

nnT1

))()1((*1

1)(

Page 34: Sortiranje podataka - Ruđer Bošković Institute

3434

�� RjeRješšava se ava se rekurzijarekurzija

�� Kad se Kad se jdbajdba pomnopomnožži s n i srede dvije sume, slijedii s n i srede dvije sume, slijedi

�� Od gornjeg izraza se oduzme izraz za nOd gornjeg izraza se oduzme izraz za n--1, 1, nakon sreñivanja slijedi nakon sreñivanja slijedi n * n * ttnn = (n + 1) * = (n + 1) * ttnn--11 +2 * n+2 * n

�� Dijeljenjem izraza s n(n+1) slijediDijeljenjem izraza s n(n+1) slijedi

�� Rekurzivnim uvrRekurzivnim uvršštavanjem ovog izraza slijedi izraztavanjem ovog izraza slijedi izraz

∑=

−−+++=

n

i

inin nttn

t1

1 1)(*1

∑−

=

++=

1

0

)1(**2*n

i

in nnttn

1

2

1

1

++=

+

nn

t

n

t nn

Page 35: Sortiranje podataka - Ruđer Bošković Institute

3535

∑+

=

+=+

1

3

1 1*2

21

n

i

n

i

t

n

t

2ln)1ln(11

3

−+≤∑+

=

ni

n

i

��Poznato je da vrijedi:Poznato je da vrijedi:

�� UvrUvršštavanjem i sreñivanjem slijeditavanjem i sreñivanjem slijedittnn ≤≤ 2 * (n + 1) * [2 * (n + 1) * [lnln(n+1) (n+1) –– lnln 2 + k]2 + k]

tjtj. . TTprospros = O(n * = O(n * lglg n)n)

�� ovaj algoritam je stvarno efikasan i ovaj algoritam je stvarno efikasan i isplatljivisplatljiv za sortiranje dugaza sortiranje dugaččkih nizova kih nizova elemenata i uz paelemenata i uz pažžljiv izbor pivot elementaljiv izbor pivot elementa�� Izvedba algoritma brzog sortiranja je znatno sloIzvedba algoritma brzog sortiranja je znatno složženija od recimo sortiranja enija od recimo sortiranja umetanjem, umetanjem, ššto znato značči da su konstante koje se javljaju u izrazu vremenske i da su konstante koje se javljaju u izrazu vremenske slosložženosti znatno veenosti znatno većće od konstanti za sortiranje umetanjem. Zbog toga e od konstanti za sortiranje umetanjem. Zbog toga ćće za e za kratke nizove sortiranje umetanjem biti brkratke nizove sortiranje umetanjem biti bržžee

Page 36: Sortiranje podataka - Ruđer Bošković Institute

3636

Usporedba algoritama sortiranjaUsporedba algoritama sortiranja

�� Primjer programa u kojem se usporeñuju brzine izvrPrimjer programa u kojem se usporeñuju brzine izvrššavanja sljedeavanja sljedeććih ih algoritama sortiranja:algoritama sortiranja:1) sortiranje izborom (1) sortiranje izborom (selectionselection sortsort) ) –– pronañe se najmanji element u nizu pronañe se najmanji element u nizu i stavi se na prvo mjesto (zamijene se mjesta najmanjeg i prvog)i stavi se na prvo mjesto (zamijene se mjesta najmanjeg i prvog), pa se , pa se postupak ponavlja za preostale elemente na krapostupak ponavlja za preostale elemente na kraććim listamaim listama2) 2) mjehurimjehuriččastoasto sortiranje (sortiranje (bubblebubble sortsort) ) –– svaki element se usporedi sa svaki element se usporedi sa sljedbenikom, vesljedbenikom, većći uvijek ide otraga, na kraju prvog koraka najvei uvijek ide otraga, na kraju prvog koraka najvećći element i element za zadnjem mjestu, postupak se ponavlja za kraza zadnjem mjestu, postupak se ponavlja za kraćću listuu listu3) pobolj3) poboljššano ano mjehurimjehuriččastoasto sortiranje: ako nema zamjene elemenata u sortiranje: ako nema zamjene elemenata u nekom inekom i--tom koraku, znatom koraku, značči da je ostatak liste sortirani da je ostatak liste sortiran4) sortiranje umetanjem (4) sortiranje umetanjem (insertioninsertion sortsort) ) –– niz se dijeli na veniz se dijeli na većć sortiran i josortiran i joššnesortiran nesortiran podnizpodniz, u prvom koraku je u prvom , u prvom koraku je u prvom podnizupodnizu samo prvi element, samo prvi element, u svakom koraku se uzima prvi element iz drugog u svakom koraku se uzima prvi element iz drugog podnizapodniza i usporeñuje s i usporeñuje s elementima u prvom elementima u prvom podnizupodnizu dok se ne nañe pozicija na kojoj mora biti dok se ne nañe pozicija na kojoj mora biti

Page 37: Sortiranje podataka - Ruđer Bošković Institute

3737

5) 5) ShellovoShellovo sortiranje sortiranje -- sortiranje krasortiranje kraććih ih podnizovapodnizova u koracima upotrebom u koracima upotrebom sortiranja umetanjemsortiranja umetanjem6) sortiranje pomo6) sortiranje pomoćću hrpe (u hrpe (heapsortheapsort) ) –– zasniva se na specijalnom svojstvu hrpe zasniva se na specijalnom svojstvu hrpe da je roditelj uvijek veda je roditelj uvijek većći (manji) od potomakai (manji) od potomaka7) sortiranje spajanjem (7) sortiranje spajanjem (mergemerge sortsort) ) –– algoritam podijelialgoritam podijeli--papa--vladaj, rekurzivno vladaj, rekurzivno dijeli niz na dijeli niz na podnizovepodnizove i sortirane i sortirane podnizovepodnizove spaja u konaspaja u konaččni sortirani nizni sortirani niz8) brzo sortiranje (8) brzo sortiranje (quicksortquicksort) ) –– poboljpoboljššano sortiranje spajanjem u kojem je ano sortiranje spajanjem u kojem je izbjegnut sam proces spajanja izbjegnut sam proces spajanja podnizovapodnizova; rekurzivni postupak u kojem se izabire ; rekurzivni postupak u kojem se izabire pivot (stopivot (stožžerni) eleerni) element koji se usporeñuje sa preostalim elementimament koji se usporeñuje sa preostalim elementima, manji od , manji od njega se stavljaju prije pivota, a venjega se stavljaju prije pivota, a većći izai iza

�� Generiranje niza za sortiranje: elementi niza su indeksi polja, Generiranje niza za sortiranje: elementi niza su indeksi polja, razbacaju se po razbacaju se po polju upotrebom generatora slupolju upotrebom generatora sluččajnih brojevaajnih brojeva

�� Svaki algoritam sortiranja se testira na razbacanom i sortiranomSvaki algoritam sortiranja se testira na razbacanom i sortiranom nizu i mjeri se nizu i mjeri se vrijeme izvrvrijeme izvrššavanja algoritmaavanja algoritma

Page 38: Sortiranje podataka - Ruđer Bošković Institute

3838

#include <#include <stdlib.hstdlib.h>>#include <#include <stdio.hstdio.h>>#include <#include <string.hstring.h>>#include <#include <time.htime.h>>#include <sys#include <sys\\timeb.htimeb.h>>typedeftypedef intint tip;tip;

// // vrijemevrijeme u msu msintint TrajanjeTrajanje ((structstruct timebtimeb *vrijeme1) {*vrijeme1) {structstruct timebtimeb vrijeme2;vrijeme2;ftimeftime (&vrijeme2);(&vrijeme2);return 1000 * (vrijeme2.time return 1000 * (vrijeme2.time -- vrijeme1vrijeme1-->time) +>time) +

vrijeme2.millitm vrijeme2.millitm -- vrijeme1vrijeme1-->>millitmmillitm;;}}

/// / ispisispis porukeporuke i i prekidprekid programaprogramavoid void FatalnoFatalno (char *(char *nizniz) {) {printfprintf ("("\\n %s n %s \\n", n", nizniz););exit (1);exit (1);

}}

Page 39: Sortiranje podataka - Ruđer Bošković Institute

3939

// // zamjenazamjena vrijednostivrijednosti **lijevolijevo i *i *desnodesno__inline void __inline void ZamijeniZamijeni (tip *(tip *lijevolijevo, tip *, tip *desnodesno) {) {tip tip pompom = *= *lijevolijevo;;**lijevolijevo = *= *desnodesno;;**desnodesno = = pompom;;

}}

// sort// sortiranjeiranje izboromizboromvoid void SelectionSortSelectionSort (tip A [], (tip A [], intint N) {N) {

intint i, j, min;i, j, min;for (i = 0; i < N; i++) {for (i = 0; i < N; i++) {

min = i;min = i;for (j = i+1; j < N; j++) {for (j = i+1; j < N; j++) {if (if (A[jA[j] < ] < A[minA[min]) min = j;]) min = j;

}}Zamijeni(&A[iZamijeni(&A[i], &], &A[minA[min]);]);

}}}}

Page 40: Sortiranje podataka - Ruđer Bošković Institute

4040

// // mjehuricastmjehuricastoo sortsortiranjeiranjevoid void BubbleSortBubbleSort (tip A [], (tip A [], intint N) {N) {

intint i, j;i, j;for (i = 0; i < Nfor (i = 0; i < N--1; i++) {1; i++) {for (j = 0; j < Nfor (j = 0; j < N--11--i; j++) {i; j++) {if (A[j+1] < if (A[j+1] < A[jA[j]) ]) ZamijeniZamijeni (&(&A[jA[j], &A[j+1]);], &A[j+1]);

}}}}

}}

////poboljpoboljššanoano mjehuricastmjehuricastoo sortsortiranjeiranjevoid void BubbleSortPoboljsaniBubbleSortPoboljsani (tip A [], (tip A [], intint N) {N) {

intint i, j, i, j, BilaZamjenaBilaZamjena;;for (i = 0, for (i = 0, BilaZamjenaBilaZamjena = 1; = 1; BilaZamjenaBilaZamjena; i++) {; i++) {

BilaZamjenaBilaZamjena = 0;= 0;for (j = 0; j < Nfor (j = 0; j < N--11--i; j++) {i; j++) {if (A[j+1] < if (A[j+1] < A[jA[j]) {]) {

ZamijeniZamijeni (&(&A[jA[j], &A[j+1]);], &A[j+1]);BilaZamjenaBilaZamjena = 1;= 1;

}}}}

}}}}

Page 41: Sortiranje podataka - Ruđer Bošković Institute

4141

// sort// sortiranjeiranje umetanjemumetanjemvoid void InsertionSortInsertionSort (tip A [], (tip A [], intint N) {N) {intint i, j;i, j;tip tip pompom;;for (i = 1; i < N; i++) {for (i = 1; i < N; i++) {pompom = = A[iA[i];];for (j = i; j >= 1 && A[jfor (j = i; j >= 1 && A[j--1] > 1] > pompom; j; j----))A[jA[j] = A[j] = A[j--1];1];

A[jA[j] = ] = pompom; }; }}}

// Shell// Shellovoovo sortsortiranjeiranjevoid void ShellSortShellSort (tip A [], (tip A [], intint N) {N) {intint i, j, i, j, korakkorak;;tip tip pompom;;for (for (korakkorak = N / 2; = N / 2; korakkorak > 0; > 0; korakkorak /= 2) { // Insertion sort s /= 2) { // Insertion sort s veaimveaim korakomkorakomfor (i = for (i = korakkorak; i < N; i++) {; i < N; i++) {pompom = A [i];= A [i];for (j = i; j >= for (j = i; j >= korakkorak && && A[jA[j--korakkorak] > ] > pompom; j ; j --= = korakkorak) {) {

A [j] = A [j A [j] = A [j -- korakkorak]; }]; }A [j] = A [j] = pompom; } }; } }

}}

Page 42: Sortiranje podataka - Ruđer Bošković Institute

4242

// // podepodeššavanje hrpeavanje hrpevoid void PodesiPodesi (tip A[], (tip A[], intint i, i, intint n) {n) {intint j;j;tip tip stavkastavka;;j = 2*i;j = 2*i;stavkastavka = = A[iA[i];];while (j <= n ) {while (j <= n ) {if ((j < n) && (if ((j < n) && (A[jA[j] < A[j+1])) j++;] < A[j+1])) j++;if (if (stavkastavka >= >= A[jA[j]) break;]) break;A[j/2] = A[j/2] = A[jA[j];];j *=2; }j *=2; }

A[j/2] = A[j/2] = stavkastavka;; }}// // inicijalnoinicijalno stvaranjestvaranje hrpehrpevoid void StvoriGomiluStvoriGomilu (tip A[], (tip A[], intint n) {n) {intint i;i;for (i = n/2; i >= 1; ifor (i = n/2; i >= 1; i----) ) PodesiPodesi (A, i, n);(A, i, n); }}

// // sortiranje pomosortiranje pomoćću hrpeu hrpevoid void HeapSortHeapSort (tip A[], (tip A[], intint n) { // A[1:n] n) { // A[1:n] sadrzisadrzi podatkepodatke kojekoje trebatreba sortiratisortiratiintint i;i;StvoriGomiluStvoriGomilu (A, n);(A, n);for (i = n; i >= 2; ifor (i = n; i >= 2; i----) {// ) {// ZamijeniZamijeni korijenkorijen i i zadnjizadnji list, list, skratiskrati poljepolje zaza 1 i 1 i podesipodesi hrphrpuu

ZamijeniZamijeni (&A[1], &(&A[1], &A[iA[i]);]);PodesiPodesi (A, 1, i(A, 1, i--1);1); }}}}

Page 43: Sortiranje podataka - Ruđer Bošković Institute

4343

//// udruzivanjeudruzivanje LPoz:LijeviKrajLPoz:LijeviKraj i i DPoz:DesniKrajDPoz:DesniKrajvoid Merge (tip A [], tip void Merge (tip A [], tip PomPoljePomPolje [], [], intint LPozLPoz, , intint DPozDPoz, , intint DesniKrajDesniKraj) {) {intint i, i, LijeviKrajLijeviKraj, , BrojClanovaBrojClanova, , PomPozPomPoz;;LijeviKrajLijeviKraj = = DPozDPoz -- 1;1;PomPozPomPoz = = LPozLPoz;;BrojClanovaBrojClanova = = DesniKrajDesniKraj -- LPozLPoz + 1; + 1;

while (while (LPozLPoz <= <= LijeviKrajLijeviKraj && && DPozDPoz <= <= DesniKrajDesniKraj) {// ) {// glavnaglavna peljapeljaif (A [if (A [LPozLPoz] <= A [] <= A [DPozDPoz])])PomPoljePomPolje [[PomPozPomPoz++] = A [++] = A [LPozLPoz++];++];

elseelsePomPoljePomPolje [[PomPozPomPoz++] = A [++] = A [DPozDPoz++]; }++]; }

while (while (LPozLPoz <= <= LijeviKrajLijeviKraj) // ) // KopirajKopiraj ostatakostatak prveprve polovicepolovicePomPoljePomPolje [[PomPozPomPoz++] = A [++] = A [LPozLPoz++];++];

while (while (DPozDPoz <= <= DesniKrajDesniKraj) // ) // KopirajKopiraj ostatakostatak drugedruge polovicepolovicePomPoljePomPolje [[PomPozPomPoz++] = A [++] = A [DPozDPoz++];++];

for (i = 0; i < for (i = 0; i < BrojClanovaBrojClanova; i++, ; i++, DesniKrajDesniKraj----) // ) // KopirajKopiraj PomPoljePomPolje natragnatragA [A [DesniKrajDesniKraj] = ] = PomPoljePomPolje [[DesniKrajDesniKraj];]; }}

// // MergeSortMergeSort -- rekurzivnorekurzivno sortiranjesortiranje podpoljapodpoljavoid void MSortMSort (tip A [], tip (tip A [], tip PomPoljePomPolje[], [], intint lijevolijevo, , intint desnodesno ) {) {intint sredinasredina;;if (if (lijevolijevo < < desnodesno) { ) { sredinasredina = (= (lijevolijevo + + desnodesno) / 2;) / 2;MSortMSort (A, (A, PomPoljePomPolje, , lijevolijevo, , sredinasredina););MSortMSort (A, (A, PomPoljePomPolje, , sredinasredina + 1, + 1, desnodesno););Merge (A, Merge (A, PomPoljePomPolje, , lijevolijevo, , sredinasredina + 1, + 1, desnodesno); }); } }}

Page 44: Sortiranje podataka - Ruđer Bošković Institute

4444

//sort//sortiranjeiranje spajanjemspajanjemvoid void MergeSortMergeSort (tip A [], (tip A [], intint N) {N) {tip *tip *PomPoljePomPolje;;PomPoljePomPolje = = mallocmalloc (N * (N * sizeofsizeof (tip));(tip));if (if (PomPoljePomPolje != NULL) {!= NULL) {MSortMSort (A, (A, PomPoljePomPolje, 0, N , 0, N -- 1);1);free (free (PomPoljePomPolje););

} else} elseFatalnoFatalno ("("NemaNema mjestamjesta zaza PomPoljePomPolje!");!");

}}

// // QuickSortQuickSort -- vvratirati medijanmedijan odod lijevolijevo, , sredinasredina i i desnodesno, , poredajporedaj ihih i i sakrijsakrij stozerstozertip medijan3 (tip A [], tip medijan3 (tip A [], intint lijevolijevo, , intint desnodesno) {) {intint sredinasredina = (= (lijevolijevo + + desnodesno) / 2;) / 2;if (A [if (A [lijevolijevo] > A [] > A [sredinasredina])])ZamijeniZamijeni (&(&A[lijevoA[lijevo], &], &A[sredinaA[sredina]);]);

if (A [if (A [lijevolijevo] > A [] > A [desnodesno])])ZamijeniZamijeni (&A [(&A [lijevolijevo], &A [], &A [desnodesno]);]);

if (A [if (A [sredinasredina] > A [] > A [desnodesno])])ZamijeniZamijeni (&A [(&A [sredinasredina], &A [], &A [desnodesno]); // ]); // SadaSada jeje: : A[lijevoA[lijevo]<=]<=A[sredinaA[sredina]<=]<=A[desnoA[desno]]

ZamijeniZamijeni (&A [(&A [sredinasredina], &A [], &A [desnodesno -- 1]); // 1]); // VratiVrati stozerstozerreturn A [return A [desnodesno -- 1];1];

}}

Page 45: Sortiranje podataka - Ruđer Bošković Institute

4545

// // QuickSortQuickSort -- rekurzivnorekurzivno sortiranjesortiranje podpoljapodpolja#define Cutoff (3)#define Cutoff (3)void void QsortQsort (tip A [], (tip A [], intint lijevolijevo, , intint desnodesno) {) {intint i, j;i, j;tip tip stozerstozer;;if (if (lijevolijevo + Cutoff <= + Cutoff <= desnodesno) {) {stozerstozer = medijan3 (A, = medijan3 (A, lijevolijevo, , desnodesno););i = i = lijevolijevo; j = ; j = desnodesno -- 1;1;while (1) {while (1) {while (A [++i] < while (A [++i] < stozerstozer););while (A [while (A [----j] > j] > stozerstozer););if (i < j)if (i < j)ZamijeniZamijeni (&A [i], &A [j]);(&A [i], &A [j]);

elseelsebreak; } // break; } // ObnoviObnovi stozerstozer

ZamijeniZamijeni (&A [i], &A [(&A [i], &A [desnodesno -- 1]);1]);QsortQsort (A, (A, lijevolijevo, i , i -- 1);1);QsortQsort (A, i + 1, (A, i + 1, desnodesno););

} else { // } else { // SortirajSortiraj podpoljepodpoljeInsertionSortInsertionSort (A + (A + lijevolijevo, , desnodesno -- lijevolijevo + 1); }}+ 1); }}

// // brzo sortiranjebrzo sortiranjevoid void QuickSortQuickSort (tip A [], (tip A [], intint N) {N) {QsortQsort (A, 0, N (A, 0, N -- 1);}1);}

Page 46: Sortiranje podataka - Ruđer Bošković Institute

4646

// // generiragenerira podatkepodatke zaza sortsortvoid void GenerirajGeneriraj (tip A [], (tip A [], intint N) {N) {intint i;i;srandsrand ((unsigned) time (NULL));((unsigned) time (NULL));// // vrijednostivrijednosti elemenataelemenata kaokao vrijednostivrijednosti njihovihnjihovih indeksaindeksa

for( i = 0; i < N; i++ ) A [i] = i;for( i = 0; i < N; i++ ) A [i] = i;// // promijesajpromijesaj vrijednostivrijednosti

for( i = 1; i < N; i++ )for( i = 1; i < N; i++ )ZamijeniZamijeni (&A [i], &A [rand () % (i + 1)]);(&A [i], &A [rand () % (i + 1)]);

}}

// // provjeriprovjeri dada lili svisvi elementielementi imajuimaju vrijednostvrijednost jednakujednaku indeksuindeksuvoid void ProvjeriSortProvjeriSort (tip A [], (tip A [], intint N) {N) {intint i, flag = 0;i, flag = 0;for (i = 0; i < N; i++) {for (i = 0; i < N; i++) {if (if (A[iA[i] != i) {] != i) {printfprintf( "Sort ( "Sort nene radiradi: %d %: %d %dd\\nn", i, A [i]);", i, A [i]);

flag = 1;flag = 1;}}

}}if (!flag) if (!flag) printfprintf( "( "ProvjeraProvjera zavrsenazavrsena: sort OK: sort OK\\n" );n" );

}}

Page 47: Sortiranje podataka - Ruđer Bošković Institute

4747

// // kopirakopira poljepolje desnodesno[] u [] u poljepolje lijevolijevo[][]void void KopirajKopiraj (tip (tip lijevolijevo [], tip [], tip desnodesno [], [], intint N) {N) {intint i;i;for (i = 0; i < N; i++) for (i = 0; i < N; i++) lijevolijevo [i] = [i] = desnodesno [i];[i]; }}

// // pokretanjepokretanje potprogramapotprograma zaza sortsortvoid void TestSortaTestSorta (tip A[], tip B[], (tip A[], tip B[], intint N, char *N, char *ImeSortaImeSorta, void (*Sort) (tip A[], , void (*Sort) (tip A[], intint N)) {N)) {

// A // A -- poljepolje kojekoje se se sortirasortira// B // B -- poljepolje s s podacimapodacima zaza sortsort// N // N -- brojbroj clanovaclanova poljapolja// // ImeSortaImeSorta -- nazivnaziv algoritmaalgoritma// Sort // Sort -- pokazivacpokazivac nana funkcijufunkciju kojakoja obavljaobavlja sortsort

structstruct timebtimeb Vrijeme1;Vrijeme1;KopirajKopiraj (A, B, N);(A, B, N); // // kopirajkopiraj podatkepodatke iziz B u AB u A

// // sortirajsortiraj i i mjerimjeri vrijemevrijemeprintfprintf ("%s...("%s...\\n", n", ImeSortaImeSorta););ftimeftime (&Vrijeme1);(&Vrijeme1);if (if (strcmp(ImeSortastrcmp(ImeSorta, "Heap Sort") == 0) {, "Heap Sort") == 0) {Sort (ASort (A--1, N); // 1, N); // dada HeapSortHeapSort ""vidividi" A[0] " A[0] kaokao A[1]A[1]} else {} else {

Sort (A, N);Sort (A, N); }}printfprintf ("("TrajanjeTrajanje: %d ms: %d ms\\n", Trajanje(&Vrijeme1));n", Trajanje(&Vrijeme1));ProvjeriSortProvjeriSort (A, N);(A, N);

Page 48: Sortiranje podataka - Ruđer Bošković Institute

4848

// // sortirajsortiraj prethodnoprethodno sortiranosortirano poljepolje AAprintfprintf ("%s ("%s sortiranogsortiranog poljapolja......\\n", n", ImeSortaImeSorta););ftimeftime (&Vrijeme1);(&Vrijeme1);if (if (strcmp(ImeSortastrcmp(ImeSorta, "Heap Sort") == 0) {, "Heap Sort") == 0) {Sort (ASort (A--1, N);1, N);} else {} else {

Sort (A, N);Sort (A, N);}}

printfprintf ("("TrajanjeTrajanje: %d ms: %d ms\\n", Trajanje(&Vrijeme1));n", Trajanje(&Vrijeme1));ProvjeriSortProvjeriSort (A, N);(A, N);printfprintf ("("PritisniPritisni bilobilo kojukoju tipkutipku......\\nn\\nn");");getchargetchar()();;

}}

Page 49: Sortiranje podataka - Ruđer Bošković Institute

4949

void main (void) {void main (void) {intint *Polje1, *Polje2, *Polje1, *Polje2, DuljinaDuljina;;// // inicijalizacijainicijalizacijaprintfprintf ("("UnesiUnesi brojbroj clanovaclanova poljapolja >");>");scanfscanf ("%d", &("%d", &DuljinaDuljina););Polje1 = (Polje1 = (intint *) *) mallocmalloc ((DuljinaDuljina * * sizeofsizeof ((intint));));Polje2 = (Polje2 = (intint *) *) mallocmalloc ((DuljinaDuljina * * sizeofsizeof ((intint));));if (!Polje1 || !Polje2) if (!Polje1 || !Polje2) FatalnoFatalno ("("NemaNema dovoljnodovoljno memorijememorije!");!");// // generiranjegeneriranje podatakapodataka

GenerirajGeneriraj (Polje2, (Polje2, DuljinaDuljina););// // sortiranjesortiranjeTestSortaTestSorta (Polje1, Polje2, (Polje1, Polje2, DuljinaDuljina, "Selection Sort", , "Selection Sort", SelectionSortSelectionSort););TestSortaTestSorta (Polje1, Polje2, (Polje1, Polje2, DuljinaDuljina, "Bubble Sort", , "Bubble Sort", BubbleSortBubbleSort););TestSortaTestSorta (Polje1, Polje2, (Polje1, Polje2, DuljinaDuljina, "Bubble Sort , "Bubble Sort poboljsanipoboljsani", ", BubbleSortPoboljsaniBubbleSortPoboljsani););TestSortaTestSorta (Polje1, Polje2, (Polje1, Polje2, DuljinaDuljina, "Insertion Sort", , "Insertion Sort", InsertionSortInsertionSort););TestSortaTestSorta (Polje1, Polje2, (Polje1, Polje2, DuljinaDuljina, "Shell Sort", , "Shell Sort", ShellSortShellSort););TestSortaTestSorta (Polje1, Polje2, (Polje1, Polje2, DuljinaDuljina, "Heap Sort", , "Heap Sort", HeapSortHeapSort););TestSortaTestSorta (Polje1, Polje2, (Polje1, Polje2, DuljinaDuljina, "Merge Sort", , "Merge Sort", MergeSortMergeSort););TestSortaTestSorta (Polje1, Polje2, (Polje1, Polje2, DuljinaDuljina, "Quick Sort", , "Quick Sort", QuickSortQuickSort););exit(0);exit(0);

}}