Professional Documents
Culture Documents
1 Sortiranje
1 Sortiranje
dr Boban Stojanovi
Sortiranje
Sortiranje je proces u kome se elementi niza ili liste ureuju tako da ine rastui ili opadajui niz podataka. Rastui niz je takav da je svaki element vei od svog prethodnika, a manji od svog sledbenika. Nasuprot tome, svaki element opadajueg niza je manji od svog prethodnika, a vei od svog sledbenika.
dr Boban Stojanovi
Analiziranje 4. elementa (13) Analiziranje 5. elementa (4) i zamena sa 3. (12) Analiziranje 6. elementa (5) i zamena sa 4. (13) Analiziranje 7. elementa (19) Analiziranje 8. elementa (11) Analiziranje 9. elementa (6) i zamena sa 5. (12) Analiziranje 10. elementa (17) Zamena zbog postavljanja pivota na novu poziciju
10 10 10 10 10 10 10 6
7 7 7 7 7 7 7 7
12 4 4 4 4 4 4 4
13 13 5 5 5 5 5 5
4 12 12 12 12 6 6 10
5 5 13 13 13 13 13 13
19 19 19 19 19 19 19 19
11 11 11 11 11 11 11 11
6 6 6 6 6 12 12 12
17 17 17 17 17 17 17 17
Primeujemo da su po zavretku itavog postupka svi elementi manji od pivota pozicionirani sa njegove leve strane, a svi elementi vei od pivota sa njegove desne strane. U nastavku je data funkcija podeli koja obavlja prethodno navedeni postupak:
intpodeli(inta[],intdonji,intgornji) { inti,pivot; pivot=donji; for(i=donji+1;i<=gornji;i++) if(a[i]<a[donji]) { pivot++; zameni(a,i,pivot); } zameni(a,donji,pivot); return(pivot); }
pri emu funkcija zameni zamenjuje mesta navedenim lanovima niza i definisana je kao:
voidzameni(inta[],inti,intj) { intpom; pom=a[i]; a[i]=a[j]; a[j]=pom; }
Sada kada smo niz organizovali na takav nain da su svi elementi manji od pivota sa njegove leve strane, a svi vei od pivota sa njegove desne strane, itav postupak moemo ponoviti posebno na levom i desnom podnizu. Ponavljanje ovog postupka vrimo sve dok ne dobijemo podniz koji se sastoji od jednog ili dva elementa. U sluaju da podniz ima najvie jedan element, sortiranje nije potrebno. Ukoliko, pak, podniz sadri dva elementa, sortiranje se svodi na eventualnu zamenu mesta ta dva elementa. U nastavku je data rekurzivna funkcija quick koja obavlja navedeni postupak:
voidquick(inta[],intdonji,intgornji) { intpivot; //podnizimajedanilinijedanelement if(donji>=gornji)return; //podnizimadvaelementa
dr Boban Stojanovi
S obzirom da krajnji korisnik funkcije za sortiranje oekuje da parametri funkcije budu samo niz i duina niza, moemo napisati funkciju koja ima ovakve parametre i koja na odgovarajui nain poziva rekurzivnu funkciju quick:
voidsort(inta[],intn) { quick(a,0,n1); }