Professional Documents
Culture Documents
Sortiranje
Sortiranje
PODATAKA I ALGORITMI
sor)ranje
2011/2012
SORTIRANJE
Sor)ranje
je
postupak
ponovnog
rasporeivanja
stvari
prema
nekoj
njihovoj
odrednici,
na
nain
da
te
stvari
budu
rasporeene
uzlazno
ili
silazno.
2 / 38
SORTIRANJE
Jedna
od
prvih
primjena
sor)ranja
u
velikim
informacijskim
sustavima
je
bila
1960.
u
tvrtci
Computer
Sciences
Corpora)on
U
tom
desetljeu
proizvoai
raunala
su
tvrdili
kako
vie
od
25%
vremena
u
kojem
njihova
raunala
rade,
otpada
na
sor)ranje,
a
u
nekim
tvrtkama
taj
postotak
je
rastao
i
do
50%.
Odavde
su
se
kristalizirala
3
zakljuka
- sor)ranje
ima
mnogo
vanih
primjena
- ljudi
sor)raju
kada
i
ne
bi
trebali
- u
upotrebi
su
neuinkovi)
algoritmi
sor)ranja
Na
prvi
i
drugi
zakljuak
raunarstvo
nije
moglo
utjeca),
ali
na
trei
itekako
je,
razvojem
novih
i
uinkovi)jih
algoritama
sor)ranja
3 / 38
SORTIRANJE
Za
bolje
shvaanje
sor)ranja
potrebno
je
poblie
denira)
problem
kojeg
ono
ima
rijei)
Dano
je
n
elemenata
R
1
,
R
2
,,
R
n
koje
treba
sor)ra),
pri
emu
se
elemen)
esto
zovu
zapisi
(eng.
record)
Svakom
od
zapisa
R
j
pripada
odgovarajui
klju
K
j
koji
usmjerava
proces
sor)ranja.
- Kljuevi
predstavljaju
neku
odrednicu
zapisa
po
kojoj
se
sor)ra.
Ako
zapis
predstavlja
studenta
s
imenom,
prezimenom,
godinom
roenja
i
sl.
onda
jedan
od
kljueva
moe
bi)
dob
ili
prezime
4 / 38
SORTIRANJE
Zapise
sor)ranjem
valja
poreda)
na
specian
nain,
a
ta
relacija
poretka
(ureaja)
koja
se
denira
nad
kljuevima
mora
zadovoljava)
sljedee
uvjete
za
bilo
koja
tri
kljua
a,b, c
- naelo
trihotomije
-
uvijek
vrijedi
tono
jedan
od
izraza
a < b, a = b, a > b
- tranzi:vnost
-
iz
odnosa
a
<
b
i
b
<
c
lslijedi
odnos a < c
K p (1) K p ( 2 ) K p ( n )
Sor)ranje
se
dodatno
naziva
stabilnim
ako
zapisi
sa
is)m
kljuevima
nakon
sor)ranja
zadre
svoj
is)
rela)vni
poredak
u
odnosu
na
poetno
stanje
5 / 38
SORTIRANJE
Neka
je
dano
pet
uzastopnih
memorijskih
lokacija
M1,
M2,
M3,
M4,
M5
a
na
svakoj
od
njih
po
jedan
cijeli
broj.
Napii
program
koji
e
izmijeniC
poredak
brojeva
na
lokacijama,
ako
je
to
potrebno,
tako
da
budu
poredani
uzlazno.
6 / 38
SORTIRANJE
Neka
je
dano
pet
uzastopnih
memorijskih
lokacija
M1,
M2,
M3,
M4,
M5
a
na
svakoj
od
njih
po
jedan
cijeli
broj.
Napii
program
koji
e
izmijeniC
poredak
brojeva
na
lokacijama,
ako
je
to
potrebno,
tako
da
budu
poredani
uzlazno.
Ako
ste
napravili
takav
algoritam
on
gotovo
sigurno
spada
u
jedan
od
sljedeih
)pova:
- sor)ranje
umetanjem
brojevi
se
razmatraju
jedan
po
jedan
i
svaki
novorazmatrani
broj
se
umee
na
odgovarajuu
poziciju
ovisno
o
prethodno
sor5ranim
elemen5ma
- sor)ranje
izmjenom
ako
se
za
dva
susjedna
broja
utvrdi
da
nisu
u
povoljnom
meusobnom
odnosu
tada
oni
mijenjaju
mjesta,
a
ovaj
postupak
se
ponavlja
sve
dok
zamjene
vie
nisu
potrebne
- sor)ranje
izborom
prvo
se
pronae
najmanji
(najvei)
element
i
na
neki
nain
izdvoji
od
ostatka,
a
potom
se
proces
ponavlja
za
preostale
elemente
- sor)ranje
spajanjem
- neto
totalno
drugaije
Strukture
podataka
i
algoritmi
7 / 38
SORTIRANJE
-
UMETANJEM
Algoritmi
iz
ove
skupine
podsjeaju
na
algoritme
koritene
pri
slaganju
karata
u
kartakim
igrama
treeC
ili
remiju.
Prije
razmatranja
zapisa
R
j
- pretpostavljamo
da
su
prethodni
zapisi
R
1
,
R
2
,,
R
j
1
sor)rani
- potom
ga
umeemo
na
odgovarajue
mjesto
meu
prethodno
sor)rane
zapise
8 / 38
I5
[Smjes:
R]
Postavi
Ri +1 = R
Ako
je
i
=
0,
tada
je
K
najmanji
do
sada
pronaeni
klju,
tako
da
zapis
R
pripada
na
mjestu
1
9 / 38
10 / 38
11 / 38
12 / 38
13 / 38
14 / 38
t je korak
15 / 38
16 / 38
( )
17 / 38
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
niz[j + korak] = v;
}
}
18 / 38
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
int korak_idx = 0;
int korak = CiurinNiz[0];
if (duljina > korak)
{
while(duljina > korak)
{
korak_idx--;
korak = (int)(korak*prosirenje);
}
}
else
{
while(duljina < korak)
{
korak_idx++;
korak = CiurinNiz[korak_idx];
}
}
while (korak > 1)
{
korak_idx++;
if (korak_idx >= 0)
korak = CiurinNiz[korak_idx];
else
korak = (int)(korak/prosirenje);
ShellSortPomocna(niz, duljina, korak);
}
19 / 38
SORTIRANJE
-
IZMJENOM
Druga
familija
algoritama
za
sor)ranje
koris)
zamjenu
ili
transpoziciju
kao
metodu
sor)ranja,
pri
emu
sistema)no
zamjenjuje
svaka
dva
elementa
koja
nisu
u
eljenom
odnosu,
sve
dok
takvih
parova
vie
nema.
Budui
da
se
u
svakom
algoritmu
sor)ranja
odvija
barem
neka
zamjena,
nezahvalno
je
jedan
algoritam
strpa)
u
jednu
familiju
a
drugi
u
drugu,
ali
razlike
ipak
postoje.
Varijacije
na
temu
su
- bubble
sort
- quicksort
20 / 38
( )
21 / 38
22 / 38
23 / 38
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
24 / 38
Potom
se
provjeravaju
svi
preostali
elemen)
tog
niza
i
ako
su
manji
od
njega
a
desno
ili
vei
od
njega
a
lijevo,
mijenjaju
mjesta
s
pivotom.
Algoritam
je
izrazito
brz,
ali
i
sloen
za
analizu.
( )
25 / 38
26 / 38
27 / 38
28 / 38
( )
29 / 38
30 / 38
31 / 38
32 / 38
33 / 38
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
}
34 / 38
!
!
!
!
!
!
!
!
35 / 38
36 / 38
radix
odredi koliko znamenaka ima max broj = k
petlja po i od 1 do k
formiraj niz znamenaka poevi s jedinicama (1) pa s deseticama (2) do k
sortiraj taj niz znamenaka
petlja po j od 0 do n-1 po nizu brojeva
etaj paralelno po nizu znamenaka i nizu brojeva
trai broj sa odgovarajuom znamenkom i zamijeni ga s trenutnom (1, 2, 3...)
37 / 38
1. prolaz
2. prolaz
3. prolaz
Kraj
503
087
512
061
908
170
897
275
653
426
154
509
612
677
765
703
170
061
512
612
503
653
703
154
275
765
426
087
897
677
908
509
503
908
509
703
512
612
426
653
154
061
765
170
275
677
087
897
061
087
154
170
275
426
503
509
512
612
653
677
703
765
897
908
061
087
154
170
275
426
503
509
512
612
653
677
703
765
897
908
38 / 38