Transcript
Page 1: ASP 06 Sortiranje[4]

07.04.23

Algoritmi i strukture podatakaAlgoritmi i strukture podataka

Zaštićeno licencom http://creativecommons.org/licenses/by-nc-sa/3.0/hr/

Page 2: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 2 / 3607.04.23

Creative CommonsCreative Commons

slobodno smijete:slobodno smijete: dijelitidijeliti — umnožavati, distribuirati i javnosti priopćavati djelo — umnožavati, distribuirati i javnosti priopćavati djelo remiksiratiremiksirati — prerađivati djelo — prerađivati djelo

pod sljedećim uvjetima:pod sljedećim uvjetima: imenovanjeimenovanje. Morate priznati i označiti autorstvo djela na način kako je . Morate priznati i označiti autorstvo djela na način kako je

specificirao autor ili davatelj licence (ali ne način koji bi sugerirao da Vi ili Vaše specificirao autor ili davatelj licence (ali ne način koji bi sugerirao da Vi ili Vaše korištenje njegova djela imate njegovu izravnu podršku). korištenje njegova djela imate njegovu izravnu podršku).

nekomercijalnonekomercijalno. Ovo djelo ne smijete koristiti u komercijalne svrhe. . Ovo djelo ne smijete koristiti u komercijalne svrhe. dijeli pod istim uvjetimadijeli pod istim uvjetima. Ako ovo djelo izmijenite, preoblikujete ili stvarate . Ako ovo djelo izmijenite, preoblikujete ili stvarate

koristeći ga, preradu možete distribuirati samo pod licencom koja je ista ili slična koristeći ga, preradu možete distribuirati samo pod licencom koja je ista ili slična ovoj. ovoj.

U slučaju daljnjeg korištenja ili distribuiranja morate drugima jasno dati do znanja licencne uvjete ovog djela. Najbolji način da to učinite je linkom na ovu internetsku stranicu. Od svakog od gornjih uvjeta moguće je odstupiti, ako dobijete dopuštenje nositelja autorskog prava. Ništa u ovoj licenci ne narušava ili ograničava autorova moralna prava.

Tekst licencije preuzet je s http://creativecommons.org/.

Page 3: ASP 06 Sortiranje[4]

Postupci sortiranjaPostupci sortiranja

3 / 36

Page 4: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 4 / 3607.04.23

AlgoritmiAlgoritmi

odabrani postupci za ilustraciju:odabrani postupci za ilustraciju: sortiranje biranjem (sortiranje biranjem (selection sortselection sort)) bubble sortbubble sort sortiranje umetanjem (sortiranje umetanjem (insertion sortinsertion sort)) Shellov sortShellov sort mergesortmergesort quick sortquick sort sortiranje s pomoću gomile (sortiranje s pomoću gomile (heap sortheap sort) - kasnije!) - kasnije!

Sortovihttp://www.solidware.com/sort/

Page 5: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 5 / 3607.04.23

Sortiranje biranjem (selection sort)Sortiranje biranjem (selection sort)

pronađi najmanji element niza i zamijeni ga s prvim elementom nizapronađi najmanji element niza i zamijeni ga s prvim elementom niza ponavljaj s ostatkom niza, smanjujući nesortirani dioponavljaj s ostatkom niza, smanjujući nesortirani dio

66 44 11 88 77 55 33 2211 44 66 88 77 55 33 2211 22 66 88 77 55 33 4411 22 33 88 77 55 66 4411 22 33 44 77 55 66 8811 22 33 44 55 77 66 8811 22 33 44 55 66 77 8811 22 33 44 55 66 77 8811 22 33 44 55 66 77 88

Page 6: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 6 / 3607.04.23

Algoritam i složenostAlgoritam i složenost

izvedba - 2 petlje:izvedba - 2 petlje: vanjska određuje granice sortiranog dijela nizavanjska određuje granice sortiranog dijela niza unutarnja traži najmanji element u nizuunutarnja traži najmanji element u nizu

void SelectionSort (int A [], int N) { int i, j, min; for (i = 0; i < N; i++) { min = i; for (j = i+1; j < N; j++) { if (A[j] < A[min]) min = j;

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

}}

O(n-i-1)O(n-i-1)

1

0

( 1)n

i

O n i

Page 7: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 7 / 3607.04.23

Analiza vremena izvođenjaAnaliza vremena izvođenja

dominira usporedba; zamjena ima manjedominira usporedba; zamjena ima manje vrijeme izvođenja ne ovisi o početnom redoslijedu, nego o broju vrijeme izvođenja ne ovisi o početnom redoslijedu, nego o broju

elemenataelemenata O(O(nn22)) - otprilike - otprilike nn22/2/2 usporedbi i usporedbi i nn zamjena u zamjena u prosječnom i u prosječnom i u

najgoremnajgorem slučajuslučaju nnije bitno brije bitno brži ži kad su ulazni elementi blizu svojih mjestakad su ulazni elementi blizu svojih mjesta

ubrzanje: ubrzanje: sortirati odjednom s obje stranesortirati odjednom s obje strane

najgori slučaj: naopako sortiran niznajgori slučaj: naopako sortiran niz

Page 8: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 8 / 3607.04.23

Bubble-sortBubble-sort

ideja: zamjena susjednih elemenata ako nisu u dobrom redoslijeduideja: zamjena susjednih elemenata ako nisu u dobrom redoslijedu kreni od početka niza prema kraju kreni od početka niza prema kraju zamijeni 2 elementa ako je prvi veći od drugogzamijeni 2 elementa ako je prvi veći od drugog ubrzanje: ako u prolasku kroz cijeli niz nije bilo zamjene, niz je sortiranubrzanje: ako u prolasku kroz cijeli niz nije bilo zamjene, niz je sortiran

Page 9: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 9 / 3607.04.23

Primjer sortiranja bubble-sortomPrimjer sortiranja bubble-sortom

6 4 1 8 7 5 3 24 6 1 8 7 5 3 24 1 6 8 7 5 3 24 1 6 8 7 5 3 24 1 6 7 8 5 3 24 1 6 7 5 8 3 24 1 6 7 5 3 8 24 1 6 7 5 3 2 8

4 1 6 7 5 3 2 81 4 6 7 5 3 2 81 4 6 7 5 3 2 81 4 6 7 5 3 2 81 4 6 5 7 3 2 81 4 6 5 3 7 2 81 4 6 5 3 2 7 8

1 4 6 5 3 2 7 81 4 6 5 3 2 7 81 4 6 5 3 2 7 81 4 5 6 3 2 7 81 4 5 3 6 2 7 81 4 5 3 2 6 7 8

1 4 5 3 2 6 7 81 4 5 3 2 6 7 81 4 5 3 2 6 7 81 4 3 5 2 6 7 81 4 3 2 5 6 7 8

1 4 3 2 5 6 7 81 4 3 2 5 6 7 81 3 4 2 5 6 7 81 3 2 4 5 6 7 8

1 3 2 4 5 6 7 81 3 2 4 5 6 7 81 2 3 4 5 6 7 8

1 2 3 4 5 6 7 81 2 3 4 5 6 7 8

1. prolaz 2. prolaz 3. prolaz 4. prolaz

5. prolaz 6. prolaz 7. prolaz

Page 10: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 10 / 3607.04.23

AlgoritamAlgoritam

void BubbleSort (int A [], int N) { int i, j; for (i = 0; i < N-1; i++) { for (j = 0; j < N-1-i; j++) { if (A[j+1] < A[j])

Zamijeni (&A[j], &A[j+1]); } } }

O(n-1-i)O(n-1-i)

2

0

( 1)n

i

O n i

Page 11: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 11 / 3607.04.23

Poboljšani bubble-sortPoboljšani bubble-sort

ako u nekom prolazu nije bilo zamjene, niz je sortiranako u nekom prolazu nije bilo zamjene, niz je sortiran

void BubbleSort (int A [], int N) { int i, j, BilaZamjena; for (i = 0, BilaZamjena = 1; BilaZamjena; i++) { BilaZamjena = 0; for (j = 0; j < N-1-i; j++) { if (A[j+1] < A[j]) {

Zamijeni (&A[j], &A[j+1]); BilaZamjena = 1;}

} }}

Page 12: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 12 / 3607.04.23

Analiza vremena izvođenjaAnaliza vremena izvođenja

O(nO(n22)) - otprilike - otprilike nn22/2/2 usporedbi i usporedbi i nn22/2/2 zamjena u prosječnom i u zamjena u prosječnom i u najgorem slučajunajgorem slučaju kad su ulazni elementi blizu svojih mjesta može se brzo završitikad su ulazni elementi blizu svojih mjesta može se brzo završiti najgori slučaj: naopako sortiran niznajgori slučaj: naopako sortiran niz najbolji slučaj: već sortiran niznajbolji slučaj: već sortiran niz

položaj elemenata bitan za učinkovitostpoložaj elemenata bitan za učinkovitost veliki elementi na početku niza nisu problem – brzo idu na kraj - zečeviveliki elementi na početku niza nisu problem – brzo idu na kraj - zečevi mali elementi na kraju niza su probem – polako idu prema vrhu - kornjačemali elementi na kraju niza su probem – polako idu prema vrhu - kornjače

Page 13: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 13 / 3607.04.2307.04.23

Sortiranje umetanjem (insertion sort)Sortiranje umetanjem (insertion sort)

ideja: postoje dva dijela niza: sortirani i nesortiraniideja: postoje dva dijela niza: sortirani i nesortirani u svakom koraku sortirani dio se proširuje tako da se u njega na ispravno u svakom koraku sortirani dio se proširuje tako da se u njega na ispravno

mjesto ubaci prvi element iz nesortiranog dijela nizamjesto ubaci prvi element iz nesortiranog dijela niza tako se (obično) sortiraju karte u kartaškim igramatako se (obično) sortiraju karte u kartaškim igrama

<=x<=x >x>x xx nesortiranonesortirano

<=x<=x >x>xxx nesortiranonesortirano

Page 14: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 14 / 3607.04.23

Primjer sortiranja umetanjemPrimjer sortiranja umetanjem

66 44 11 88 77 55 33 2244 66 11 88 77 55 33 2211 44 66 88 77 55 33 2211 44 66 88 77 55 33 2211 44 66 77 88 55 33 2211 44 55 66 77 88 33 2211 33 44 55 66 77 88 2211 22 33 44 55 66 77 88

66 44 11 88 77 55 33 22

Page 15: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 15 / 3607.04.23

Algoritam i složenostAlgoritam i složenost

izvedba - 2 petlje:izvedba - 2 petlje: vanjska služi za određivanje granice sortiranog dijelavanjska služi za određivanje granice sortiranog dijela unutarnja ubacuje element u sortirani niz i pomiče ostale elementeunutarnja ubacuje element u sortirani niz i pomiče ostale elemente

void InsertionSort (int A [], int N) { int i, j; int pom; for (i = 1; i < N; i++) { pom = A[i]; for (j = i; j >= 1 && A[j-1] > pom; j--) A[j] = A[j-1]; A[j] = pom; }}

O(i)O(i)

1

0

( ( ))n

i

O O i

Page 16: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 16 / 3607.04.23

Analiza vremena izvođenjaAnaliza vremena izvođenja

O(O(nn22)) - otprilike - otprilike nn22//44 usporedbi i usporedbi i nn22//44 zamjena u zamjena u prosječnom i prosječnom i 2 2 puta višeputa više u najgorem u najgorem slučajuslučaju

kkad su ulazni elementi blizu svojih mjestaad su ulazni elementi blizu svojih mjesta, brzo završ, brzo završavaava sort je stabilansort je stabilan

ne dolazi do zamjene relativnih pozicija elemenata koji imaju istu vrijednost ne dolazi do zamjene relativnih pozicija elemenata koji imaju istu vrijednost ključaključa

ako ako aa i i bb imaju isti ključ i imaju isti ključ i aa je bilo prije je bilo prije bb, nakon stabilnog sorta , nakon stabilnog sorta aa će i dalje će i dalje biti ispred biti ispred bb

Koji su najbolji i najgori slučajevi?Koji su najbolji i najgori slučajevi? najgori slučaj: naopako sortiran niznajgori slučaj: naopako sortiran niz najbolji slučaj: već sortiran niznajbolji slučaj: već sortiran niz

Page 17: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 17 / 3607.04.23

Shellov sort (Shellov sort (Shell sortShell sort))

najstariji brzi algoritam, modificirani sort umetanjemnajstariji brzi algoritam, modificirani sort umetanjem autor: Donald Shellautor: Donald Shell

ideja:ideja: za za kk-sortirano polje -sortirano polje AA vrijedi vrijedi A[i] A[i] A [i + k], A [i + k], i, i+k i, i+k indeksiindeksi ako je polje ako je polje kk-sortirano i dodatno se -sortirano i dodatno se tt-sortira (-sortira (t<kt<k), ostaje i dalje ), ostaje i dalje kk-sortirano-sortirano potpuno sortirano polje je potpuno sortirano polje je 11-sortirano-sortirano

općenito, koristi se inkrementalni slijed brojeva općenito, koristi se inkrementalni slijed brojeva hh11, h, h22, h, h33, … ,h, … ,htt

izbor sekvence izuzetno je bitan za učinkovitost algoritmaizbor sekvence izuzetno je bitan za učinkovitost algoritma animacija:animacija:

http://www.cis.fiu.edu/~weiss/Shellsort.htmlhttp://www.cis.fiu.edu/~weiss/Shellsort.html

Page 18: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 18 / 3607.04.23

Shellov sort – primjerShellov sort – primjer

6 4 1 8 7 5 3 26 4 1 8 7 5 3 26 4 1 8 7 5 3 26 4 1 2 7 5 3 8

1 4 6 2 7 5 3 81 2 6 4 7 5 3 8 1 2 6 4 7 5 3 81 2 6 4 7 5 3 8 1 2 3 4 6 5 7 8 1 2 3 4 6 5 7 8

1 2 3 4 6 5 7 8 1 2 3 4 6 5 7 8 1 2 3 4 6 5 7 8 1 2 3 4 6 5 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 81 2 3 4 5 6 7 8

korak = 4 korak = 2 korak = 1

Page 19: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 19 / 3607.04.23

AlgoritamAlgoritam

void ShellSort (int A [], int N) { int i, j, korak, pom; for (korak = N / 2; korak > 0; korak /= 2) { for (i = korak; i < N; i++) { pom = A [i]; for (j = i; j >= korak && A[j-korak] >

pom; j -= korak) { A [j] = A [j - korak];

} A [j] = pom; } }}

Page 20: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 20 / 3607.04.23

Analiza složenostiAnaliza složenosti

prosječno vrijeme izvođenja je već dugo otvoreni (neriješeni) prosječno vrijeme izvođenja je već dugo otvoreni (neriješeni) problemproblem najgori slučaj najgori slučaj O(nO(n22))

Hibbardov slijed: {1, 3, 7, …, 2Hibbardov slijed: {1, 3, 7, …, 2kk -1} rezultira najgorim slučajem -1} rezultira najgorim slučajem O(nO(n3/23/2)) prosječno prosječno O(nO(n5/45/4)) utvrđeno je simulacijom; nitko to nije uspio dokazati! utvrđeno je simulacijom; nitko to nije uspio dokazati!

Sedgwickov slijed: {1, 5, 19, 41, 109,…}, odnosno Sedgwickov slijed: {1, 5, 19, 41, 109,…}, odnosno 9*49*4ii - 9*2 - 9*2ii + 1 + 1 alternira s alternira s 44ii - 3*2 - 3*2ii +1 +1 najgori slučaj najgori slučaj O(nO(n4/34/3)) , a prosječno , a prosječno O(nO(n7/67/6))

ne zna se postoji li bolji slijedne zna se postoji li bolji slijed jednostavan algoritam, a krajnje složena analiza složenostijednostavan algoritam, a krajnje složena analiza složenosti

Page 21: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 21 / 3607.04.23

Usporedba sortova sa složenošću Usporedba sortova sa složenošću O(nO(n22))

BubbleBubble

SelectionSelection

InsertionInsertion

ShellShell

Page 22: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 22 / 3607.04.23

MergesortMergesort

koristi se strategija "podijeli pa vladaj" uz rekurzijukoristi se strategija "podijeli pa vladaj" uz rekurziju autor: John von Neumann, 1945. godineautor: John von Neumann, 1945. godine ideja algoritmaideja algoritma::

nesortirani niz podijeli se na dva niza podjednake veličinenesortirani niz podijeli se na dva niza podjednake veličine svaki podniz sortira se rekurzivno, dok se ne dobije niz od 1 elementasvaki podniz sortira se rekurzivno, dok se ne dobije niz od 1 elementa

– taj niz od jednog elementa je sortiran!taj niz od jednog elementa je sortiran! spoje se dva sortirana podniza u sortirani nizspoje se dva sortirana podniza u sortirani niz

– na temelju dva sortirana polja (A i B) puni se treće (C)na temelju dva sortirana polja (A i B) puni se treće (C)

grananjem nastane grananjem nastane loglog22 n n razina, a u svakoj od razina obavlja se razina, a u svakoj od razina obavlja se

O(n)O(n) poslaposla trajanje je trajanje je O(n logO(n log22 n) n)

Page 23: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 23 / 3607.04.23

Primjer sortiranjaPrimjer sortiranja

3131 2424 4747 11 66 7878 1212 65653131 2424 4747 11

3131 24243131 2424

2424 3131

4747 114747 11

11 474711 2424 3131 4747

66 7878 1212 656566 7878 1212 656566 7878 1212 6565

66 7878 1212 656566 1212 6565 7878

11 66 1212 2424 3131 4747 6565 7878

Page 24: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 24 / 3607.04.23

AlgoritamAlgoritam

vježba: napišite funkciju vježba: napišite funkciju MergeMerge funkcija spaja lijevu i desnu sortiranu polovicu u sortirani nizfunkcija spaja lijevu i desnu sortiranu polovicu u sortirani niz

void MSort(int A [], int PomPolje[], int lijevo, int desno) { int sredina; if (lijevo < desno) { sredina = lijevo + (desno - lijevo) / 2; MSort (A, PomPolje, lijevo, sredina); MSort (A, PomPolje, sredina + 1, desno); Merge (A, PomPolje, lijevo, sredina + 1, desno); }}

Page 25: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 25 / 3607.04.23

NapomeneNapomene

cijena bržeg sortiranja: memorijacijena bržeg sortiranja: memorija stvara se pomoćno polje!stvara se pomoćno polje!

rijetko se koristi za sortiranje u središnjoj memoriji rijetko se koristi za sortiranje u središnjoj memoriji povećani su zahtjevi za dodatnom memorijom i kopiranjempovećani su zahtjevi za dodatnom memorijom i kopiranjem

to je ključni algoritam za sortiranje na vanjskoj memorijito je ključni algoritam za sortiranje na vanjskoj memoriji ponašanje u prosječnom i najgorem slučaju: ponašanje u prosječnom i najgorem slučaju: O(nlogO(nlog22n)n) ne radi ništa brže ako je ulazni niz već sortiran!ne radi ništa brže ako je ulazni niz već sortiran!

Page 26: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 26 / 3607.04.23

QuicksortQuicksort

do sada najbrži poznati algoritam za sortiranjedo sada najbrži poznati algoritam za sortiranje rekurzija: "podijeli pa vladaj“rekurzija: "podijeli pa vladaj“

http://euler.slu.edu/~goldwasser/demos/quicksort/http://euler.slu.edu/~goldwasser/demos/quicksort/ http://www.cs.queensu.ca/home/cisc121/2004f/lecturenotes/malamb/SortingDemos/QuickSortDemo.htmlhttp://www.cs.queensu.ca/home/cisc121/2004f/lecturenotes/malamb/SortingDemos/QuickSortDemo.html

4 koraka – 4 koraka – quicksort (S)quicksort (S) ako je broj članova polja ako je broj članova polja SS jednak 0 ili 1, povratak u pozivni program jednak 0 ili 1, povratak u pozivni program odabrati bilo koji član odabrati bilo koji član vv u polju u polju S.S. To je stožer ( To je stožer (pivotpivot)) podijeli preostale članove polja podijeli preostale članove polja S, S \ {S, S \ {vv}} u dva odvojena skupa: u dva odvojena skupa:

– SS11 = { x = { x S \ { S \ {vv} } x x vv} } (sve što je manje od stožera, preseli lijevo)(sve što je manje od stožera, preseli lijevo)– SS22 = { x = { x S \ { S \ {vv} } x x vv} } (sve što je veće od stožera, preseli desno)(sve što je veće od stožera, preseli desno)

vrati niz sastavljen od vrati niz sastavljen od {quicksort (S{quicksort (S11), ), vv, quicksort (S, quicksort (S22)})}

Page 27: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 27 / 3607.04.23

Izbor stožeraIzbor stožera

nije jednoznačno određennije jednoznačno određen nije jednoznačno određeno niti što učiniti s članovima polja jednakim stožerunije jednoznačno određeno niti što učiniti s članovima polja jednakim stožeru

to postaje pitanje realizacije algoritmato postaje pitanje realizacije algoritma dio dobre izvedbe je učinkovito rješenje ovog pitanjadio dobre izvedbe je učinkovito rješenje ovog pitanja

– Weiss: "Data Structures and Algorithm Analysis in C". Weiss: "Data Structures and Algorithm Analysis in C".

moguće metode izbora stožera:moguće metode izbora stožera: procjena medijana temeljem 3 elementa (prvi element, zadnji element, element na polovici)procjena medijana temeljem 3 elementa (prvi element, zadnji element, element na polovici)

– pri procjeni medijana, ti se elementi odmah sortirajupri procjeni medijana, ti se elementi odmah sortiraju druge mogućnosti: slučajni element, prvi element, zadnji elementdruge mogućnosti: slučajni element, prvi element, zadnji element npr. niz: 8 1 4 9 6 3 5 2 7 0npr. niz: 8 1 4 9 6 3 5 2 7 0

– pivot = med3 (8, 6, 0) = 6pivot = med3 (8, 6, 0) = 6 koji je najgori mogući odabir stožera?koji je najgori mogući odabir stožera? što je stvarni medijan?što je stvarni medijan?

Page 28: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 28 / 3607.04.23

Primjer sortiranja quicksortomPrimjer sortiranja quicksortom

8 1 4 9 6 3 5 2 7 0 ^ ^ ^ 0 1 4 9 6 3 5 2 7 8

0 1 4 9 7 3 5 2 6 8 i-> <-j 0 1 4 9 7 3 5 2 6 8 i j 0 1 4 2 7 3 5 9 6 8

izbor stožera

stožer predzadnji

i i j se mimoilaze

i j 0 1 4 2 5 3 7 9 6 8

0 1 4 2 5 3 7 9 6 8 j i 0 1 4 2 5 3 7 9 6 8

0 1 4 2 5 3 7 9 6 8

i 0 1 4 2 5 3 6 9 7 8

0 1 4 2 5 3izbor stožera

9 7 8izbor stožera

6

vraćamo stožer na i

Page 29: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 29 / 3607.04.23

Složenost algoritmaSloženost algoritma

prosječno vrijeme izvođenja je prosječno vrijeme izvođenja je O(n log n)O(n log n) sortiranje je vrlo brzo, uglavnom zbog visokooptimirane unutrašnje petljesortiranje je vrlo brzo, uglavnom zbog visokooptimirane unutrašnje petlje

najgori slučaj je najgori slučaj je O(nO(n22)) uz krivi odabir stožera (min ili max član), dobiva se uz krivi odabir stožera (min ili max član), dobiva se nn particija i za svaku je particija i za svaku je

vrijeme izvođenja vrijeme izvođenja O(n)O(n) može se postići da vjerojatnost da takav slučaj nastupi eksponencijalno može se postići da vjerojatnost da takav slučaj nastupi eksponencijalno

padapada

Page 30: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 30 / 3607.04.23

Usporedba sortova sa sloUsporedba sortova sa složenošću ženošću O(nlogn)O(nlogn)

HeapHeap

MergeMerge

QuickQuick

Page 31: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 31 / 3607.04.23

Postupci sortiranjaPostupci sortiranja

sortiranje oko milijun podataka nije u praksi rijetkosortiranje oko milijun podataka nije u praksi rijetko ako jedno obavljanje programske petlje traje 1 ako jedno obavljanje programske petlje traje 1 s:s:

klasični sort trajao bi reda veličine 10klasični sort trajao bi reda veličine 1066 s (odnosno više od 11 dana) s (odnosno više od 11 dana) quick sort traje reda veličine 20 squick sort traje reda veličine 20 s

ne treba uvijek tražiti rješenje u kupnji bržih i skupljih računala!ne treba uvijek tražiti rješenje u kupnji bržih i skupljih računala! može se isplatiti investicija u razvoj i primjenu boljih algoritamamože se isplatiti investicija u razvoj i primjenu boljih algoritama

Page 32: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 32 / 3607.04.23

Indirektno sortiranjeIndirektno sortiranje

za sortiranje velikih struktura nema smisla obavljati mnogo zamjena za sortiranje velikih struktura nema smisla obavljati mnogo zamjena velikog broja podatakavelikog broja podataka primjeri takvih strukturaprimjeri takvih struktura

– matični broj studenta, prezime, ime, adresa, upisani predmeti i ocjenematični broj studenta, prezime, ime, adresa, upisani predmeti i ocjene ako se podaci sortiraju npr. po matičnom broju, tada se izdvoje u posebno ako se podaci sortiraju npr. po matičnom broju, tada se izdvoje u posebno

polje matični brojevi s pripadnim pokazivačima na ostale podatkepolje matični brojevi s pripadnim pokazivačima na ostale podatke sortira se (bilo kojim od postupaka) samo takvo izdvojeno poljesortira se (bilo kojim od postupaka) samo takvo izdvojeno polje

Page 33: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 33 / 3607.04.23

UsporedbaUsporedba

nazivnaziv najboljenajbolje prosječnoprosječno najgorenajgore stabilanstabilan metodametodaselection sort O(n2) O(n2) O(n2) ne biranje

insertion sort O(n) O(n2) O(n2) da umetanje

bubble sort O(n) - O(n2) da zamjena

shell sort - - O(n3/2) ne umetanje

merge sort O(nlogn) O(nlogn) O(nlogn) da spajanje

quick sort O(nlogn) O(nlogn) O(n2) ne podjela

heap sort O(nlogn) O(nlogn) O(nlogn) ne biranje

Page 34: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 34 / 3607.04.23

Animacije algoritamaAnimacije algoritama

http://www.geocities.com/SiliconValley/Network/1854/Sort1.htmlhttp://www.geocities.com/SiliconValley/Network/1854/Sort1.html http://www.solidware.com/sort/http://www.solidware.com/sort/ http://www.cs.hope.edu/~dershem/ccaa/animator/Animator.htmlhttp://www.cs.hope.edu/~dershem/ccaa/animator/Animator.html http://cg.scs.carleton.ca/~morin/misc/sortalg/http://cg.scs.carleton.ca/~morin/misc/sortalg/ http://homepages.dcc.ufmg.br/~dorgival/applets/SortingPoints/SortingPoints.htmlhttp://homepages.dcc.ufmg.br/~dorgival/applets/SortingPoints/SortingPoints.html http://www.cis.fiu.edu/~weiss/Shellsort.htmlhttp://www.cis.fiu.edu/~weiss/Shellsort.html http://www.educypedia.be/education/mathematicsjavasorting.htmhttp://www.educypedia.be/education/mathematicsjavasorting.htm

Google...Google...

Page 35: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 35 / 3607.04.23

Zadaci za vježbuZadaci za vježbu

Napisati program koji će u cjelobrojnom polju od Napisati program koji će u cjelobrojnom polju od nn članova pronaći članova pronaći kk-ti najveći član polja.-ti najveći član polja.a)a) Učitano polje sortirati po padajućim vrijednostima i ispisati član s indeksom Učitano polje sortirati po padajućim vrijednostima i ispisati član s indeksom

k-1k-1..b)b) Učitati Učitati kk članova polja, sortirati ih po padajućim vrijednostima. Učitavati članova polja, sortirati ih po padajućim vrijednostima. Učitavati

preostale članove polja. Ako je pojedini član manji od onoga s indeksom preostale članove polja. Ako je pojedini član manji od onoga s indeksom k-k-11, ignorirati ga, ako je veći umetnuti ga na pravo mjesto, a izbaciti član , ignorirati ga, ako je veći umetnuti ga na pravo mjesto, a izbaciti član polja koji bi sad imao indeks polja koji bi sad imao indeks kk..

c)c) Varirati postupke sortiranja te odrediti pripadna apriorna vremena i izmjeriti Varirati postupke sortiranja te odrediti pripadna apriorna vremena i izmjeriti aposteriorna vremena izvođenja.aposteriorna vremena izvođenja.

Odrediti apriorna vremena trajanja, a izmjeriti aposteriorna vremena. Odrediti apriorna vremena trajanja, a izmjeriti aposteriorna vremena. Varirati postupak sortiranja.Varirati postupak sortiranja.

Page 36: ASP 06 Sortiranje[4]

Algoritmi i strukture podataka, FER, 2010./11. 36 / 3607.04.23

Zadaci za vježbuZadaci za vježbu

Napisati program koji će od dvije sortirane slijedne datoteke Napisati program koji će od dvije sortirane slijedne datoteke napraviti treću sortiranu slijednu datoteku. napraviti treću sortiranu slijednu datoteku.

UpariDatotekeUpariDatoteke


Top Related