← Back to topics
Topic

Sortiranje

A
Al3kSaNdaR
Koju su efikasni algoritmi za sortiranje? Da li mora u zadacima da se radi Quick Sort ili postoji jos neki koji je takodje efikasan?
b
boba5551
Pa Quick Sort je efikasan i lako se kuca. U srednjem slucaju njegova vremenska slozenost je O(n log n), bar ona verzija QSa koju takmicari najcesce kucaju.

Pored toga postoji merge sort koji uvek radi O(n log n). Postoji heap sort koji takodje ima takvu slozenost. Ti sam onda proceni kada ti je dovoljno da iskucas Selection sort ili kad moras da kucas quick sort, merge sort i slicno. Ako koristis C++ tamo imas ugradjen sort koji sigurno radi u najgorem slucaju O(n log n), ali svakako je dobro da prvo naucis kako se kuca, pa onda kasnije da koristis gotovo.
D
DuXSerbia
A sta ti smeta QSort? :)

Postoje Heap i Merge sort koji rade u NlogN, dok QSort u proseku radi NlogN.
Mada ja ne vidim zasto ne bi koristio QSort u zadacima, on je sasvim dovoljan...
D
DuXSerbia
boba ti je vec detaljnije odgovorio...
A
Al3kSaNdaR
Znam da C++ ima ugradjen sort, i to sam koristio, ali sada radim jedan zadatak u Pascalu i trebam nesto da sortiram a ne znam da li moze da prodje neki sporiji sort kao sto su Selection i Bubble ili moram da kucam neki brzi sort. Radi se o zadatku Kamen sa okruznog takmicenja 2008.


Da li je dobar ovaj C++ kod za QSort.

void QSort (int l, int d)
{
int Tmp, pivot, i, j;
if (l < d)
{
pivot = a [(l + d) / 2];
i = l;
j = d;
do
{
while (a [i] > pivot) i++;
while (a [j] < pivot) j--;
if (i <= j)
{
Tmp = a [i]; a [i] = a [j]; a [j] = Tmp;
i++; j--;
}
}
while (i <= j);
QSort (l, j);
QSort (i, d);
}
}
A
Al3kSaNdaR
Ne smeta mi QSort ali nikako ne mogu da ga napisem kako treba. :S
b
boba5551
Da, taj zadatak sam ja dao i ima par malo podmuklih test primera gde onaj QS koji se najcesce kuca ne prolazi. Probaj, a ako ne uspes onda iskucaj heap sort taman ces nauciti kako se koristi heap (ako vec ne znas) i uraditi zadatak :) Idejno ni jedan nije tezak.
n
nemanja1990
u paskalu bi trebalo da imas folder examples gde ima qsort
t
turgond
Bobo tu si mi uzeo 10p xD
A po programu takmicenja pise da su nlogn sortovi tek za republicko xD
A
Al3kSaNdaR
xD Heap je prosao bez problema, hvala jos jednom. ;)

http://www.z-trening.com/new/www/html/submit.php?submit=7100012748&subm_code=1
D
DuXSerbia
Meni je za taj zadatak prosao i "uobicajeni" QSort...
t
turgond
meni je na tak radio za 90 jer mi nije palo na pamet da pisem nesto vise od buble xD
a
astrix
Tmp = a ; a = a [j]; a [j] = Tmp;
mozes umesto toga samo
swap(a,a[j]); :)
koristi sort ili qsort iz STL, naravno kad ih naucis:)
m
mfolnovic
ili ako si u pascalu, i ne zelis koristiti tmp:
a += b
b = a - b
a -= b

npr.
a = 4
b = 2

a += b -> a = 4 + 2 = 6
b = a - b -> b = 6 - 2 = 4
a -= b -> a = 6 - 4 = 2
a
adminModerator
ili jos brze
a = a xor b
b = a xor b
a = a xor b

a i lepo izgleda
A
Al3kSaNdaR
Ok , hvala. Sada cju da radim tako jer kazete da je brze. ;)