Professional Documents
Culture Documents
Sort Iran Je
Sort Iran Je
Seminarski rad
Tema:Sortiranje
Profesor: Student:
1. Uvod....................................................................................................................................................3
2. Sortiranje izborom uzastopnih minimuma (selection sort)..................................................................4
3. Sortiranje umetanjem elemenata niza na odgovarajuća mesta (insertion-sort)..................................5
4. Sortiranje zamenom susednih elemenata (bubble sort)......................................................................7
5. Sortiranje korišćenjem drveta (heap sort)...........................................................................................9
6. Literatura...........................................................................................................................................13
2
1. Uvod
Zbog čestog pojavljivanja problem sortiranja je znatno izučavan usled čega je nastao veliki
broj algoritama za sortiranje.Algoritam sortiranja postavlja elemente neke liste u određeni
redosled.Efektivni algoritmi sortiranja preduslov su uspešnosti nekih drugih algoritama, npr.
onih algoritamapretraživanja koji zahtevaju sortiranu listu da bi se u njoj mogli pronaći neki
elementi. Većina algoritama sortiranja zasniva se na metodologiji „podeli pa vladaj“ ,to jest
ponavlja se postupak redukovanja složenog problema na više jednostavnijih manjih celina,
odnosno veliki niz se deli na više manjih nizova kojise zasebno sortiraju. Takvi zasebno
sortirani segmenti zatim se spajaju u konačno sortiran niz.Redukovanje niza se obično obavlja na
na rekurzivan način. Algoritmi sortiranja najviše se razlikuju u operacijama odnosno načinima
deljenja na podnizove i spajanja u konačno sortirani niz.
Postoji veliki broj algoritama za sortiranje a u ovom radu ćemo se baviti sa četiri vrste
sortiranja:
1. sortiranje izborom uzastopnih minimuma (selection-sort),
2. sortiranje zamjenom susednih elemenata (bubble-sort)
3. sortiranje umetanjem elemenata niza na odgovarajuća mesta (insertion-sort)
4. sortiranje korišćenjem drveta (heap-sort)
3
2. Sortiranje izborom uzastopnih minimuma (selection sort)
Metoda selekcije je jednostavan algoritam sortiranja koji ima bolje performanse odmnogo
složenijih algoritama sortiranja u određenim situacijama, kao što su primene zarad u realnom
vremenu ili kada je upis u memoriju značajno vremenski skuplji od čitanjaiz memorije (na
primer prilikom rada sa nizovima smeštenim u EEPROM ili Flash memoriji).Metoda slekcije
takođe ima visoke performanse kada je u pitanju rad sa malimnizovima (10-20 elemenata) gde je
brža čak i od podeli-pa-vladaj algoritama sortiranjakao što su quicksort ili mergesort. S toga je i
primena metode selekcije za “dovoljnomale“ ulazne podnizove korisna praktična optimizacija za
rekurzivne algoritme.
4
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;
}
swap(&a[i], &a[min]);
}
}
Analiza rada:
Metod selekcije je jednostavniji za analizu složenosti u odnosu na neke drugealgortime
sortiranja, zato što nijedna petlja u algoritmu ne zavisi od podataka u nizu.Da bi
odredilisloženost ovog algoritma treba naći nekakvu meru njegove brzine i odrediti od čega ta
brzina zavisi. Jasno je da dužina niza N ima presudan značaj. Manji značaj ima i tip elemenata
niza, jer za neke složenije tipove podataka upoređivanje je puno komplikovanije nego za
nekejednostavnije tipove podataka. Nadalje, u ovoj jednostavnoj analizi, gledaćemo samo
uticajdužine niza N.
U prvoj iteraciji spoljne petlje po brojaču i, imamo N −1 ponavljanja unutrašnje petlje po
brojaču j. Svaki sledeći put imamo jedno ponavljanje manje. Sada mozemo izračunati
brojponavljanja Us:
( N −1 ) N N 2−N
Us = (N - 1) + (N - 2) + … + 3 + 2 + 1 = =
2 2
Ovu jednakost je lako dokazati ako saberemo prvi član sume sa zadnjim, drugi sa
predzadnjim itd.Na kraju, zaključimo da je algoritam“selection-sort” tzv. “kvadratnesloženosti”,
tj.nazovimo tako ovu klasu sporijihalgoritama za sortiranje. Vidimo da ni to što se od N 2
oduzima N i to svedeli s dva ne pomaže puno, tj. i dalje imamo ‘dosta spor’ algoritam.
6
Sledi analiza vremenske složenosti jednostavnog algoritma za sortiranje umetanjem
(insertionsort).
- U k-tom prolasku natraške prolazimo sortiranim delom nizadužinek. Zatečene
elementepomičemo za jedno mesto dalje dok god su oni veći od elementa kojeg želimo umetnuti
na“pravo mesto”. To u najgorem slučaju daje k upoređivanja i otprilike isto toliko pridruživanja.
- Dakle ukupni broj operacija u najgorem slučaju je otprilike
- Red veličine za vreme izvodenja je opet O(n2). Uprkos takvoj asimptotskoj oceni, ovaj
algoritamse u praksi ipak pokazuje bržim od pre opisanog algoritma sa zamenom elemenata.
7
Slika 3. Primer sortiranja algoritmom zamene susednih elemenata
- Ocenjeni broj operacija zaista se dobija kad su elementi početnog niza sortirani silazno.
- S druge strane, ako je početniniz već sortirano uzlazno, obaviće se samo jedan prolaz s
n−1upoređivanja i 0 zamena.
8
- Za bilo koje drugo uredenje početnog polja broj operacija je izmedu (n − 1) i 2n(n − 1).
- U svakom slučaju, vreme izvodenja je O(n2).
Heap sort je postupak sortiranje korišćenjem binarnog drveta. Elementi niza se ubacuju na
odgovarajuće pozicije tako da grade heap, specificno binarno stablo koje zadovoljava sledeće
osobine:
a) Nivoi stabla se popunjavaju redom, da bi prešli na sledeći nivo moramo prethodni popuniti
do kraja. Svi čvorovi, osim čvorova na pretposlednjem nivou imaju dva naslednika.
Određeni broj krajnje levih čvorova pretposlednjeg nivoa ima oba naslednika, zatim jedan
čvor može imati smao jednog levog naslednika, a preostali čvorovi nemaju nalsednika.
b) Svakom čvoru je pridružena vrednost iz niza koji sortiramo, i pri tome je vrednost koja je
pridružena proizvoljnom čvoru veća ili jednaka od vrednosti pridružene njegovim potomcima. Iz
toga proizilazi da ce se u korenu uvek nalaziti maksimalni član niza.
Za predstavljanje heap-a u toku sortiranja koristi se niz koji se sortira. Polazimo od toga
da heap sadrži jedan element a[0], a zatim mu redom dodajemo elemente a[i] za i=1,2,...,n-1. Pri
dodavanju i-tog elementa u heap, elementi od 0-tog do (i-1)-og predstavljaju heap. Da bi osobina
b) bila ispunjena pri građenju heapa element niza koji postavljamo a[i] moramo "gurati gore"
(moramo ga menjati sa čvorom "roditeljom" ) sve dok ne bude manji od "roditeljskog" elementa
ili dok ne postane koren. Ako je element veći od roditeljskog elementa razmenimo ih, i
nastavljamo proveru za roditeljski čvor. Zato koristimo promenljivu j koju na početku
inicijalizujemo na i. Dok je a[j] veći od roditeljskog elementa a[(j-1)/2]), razmenimo njihove
vrednosti i j postaje roditeljski čvor(j=(j-1)/2;).
9
int i, j;
for (i = 1; i < n; i++)
{
j = i;
while (j > 0 && a[j] > a[(j - 1) / 2])
{
razmeni(ref a[j], ref a[(j - 1) / 2]);
j = (j - 1) / 2;
}
}
}
10
Kretanje (Propadanje) i-tog elementa u nizu a dužine n koji predstavlja heap,
realaizovano je metodom „goDown“.
l = 2 * i + 1;
d = 2 * i + 2;
max = i;
if (l < n && a[l] > a[max])
max = l;
if (d < n && a[d] > a[max])
max = d;
if (max != i)
{
razmeni(ref a[max], ref a[i]);
i = max;
}
else kraj = true;
}
}
Druga polovina niza a[n/2],..., a[n-1] su listovi, pa svaki od njih možemo shvatiti kao
jednočlani heap. Preostale članove niza dodajemo redom a[n/2-1],..., a[1], a[0], kao što se vrši
transformacija heapa posle razmene a[i] i a[0], da zadovoljava svojstvo b) u funkciji
izHeapaUSort, na taj način dva postojeća heapa spajamo u jedan heap. Nakon dodavanja svih
elemenata ostaje jedan heap.
11
{
for (int i = n/2-1;i>=0;i--)
goDown(a, n, i);
}
12
6. Literatura
www.google.com
www.pcpress.co.rs/index.asp
www.specijalisticki.tzv.hr
www.mycity.rs/Opste-programiranje/Neki-poznatiji-algoritmi-objasnjenje-i-implementacije.html
www.elfak.ni.ac.rs
13