asp 06 sortiranje[4]
TRANSCRIPT
07.04.23
Algoritmi i strukture podatakaAlgoritmi i strukture podataka
Zaštićeno licencom http://creativecommons.org/licenses/by-nc-sa/3.0/hr/
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/.
Postupci sortiranjaPostupci sortiranja
3 / 36
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/
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
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
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
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
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
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
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;}
} }}
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
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
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
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
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
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
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
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; } }}
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
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
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)
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
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); }}
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!
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)})}
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?
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
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
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
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
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
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
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...
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.
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