Sortiranje podataka. Ključne riječi: algoritmi za sortiranje, merge-sort, rekurzivni algoritmi. Data sorting

Similar documents
Algoritam za množenje ulančanih matrica. Alen Kosanović Prirodoslovno-matematički fakultet Matematički odsjek

Projektovanje paralelnih algoritama II

ZANIMLJIV NAČIN IZRAČUNAVANJA NEKIH GRANIČNIH VRIJEDNOSTI FUNKCIJA. Šefket Arslanagić, Sarajevo, BiH

TEORIJA SKUPOVA Zadaci

Mathcad sa algoritmima

Rekurzivni algoritmi POGLAVLJE Algoritmi s rekurzijama

ALGORITMI PODIJELI PA VLADAJ

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni nastavnički studij matematike i informatike. Sortiranje u linearnom vremenu

Slika 1. Slika 2. Da ne bismo stalno izbacivali elemente iz skupa, mi ćemo napraviti još jedan niz markirano, gde će

KVADRATNE INTERPOLACIJSKE METODE ZA JEDNODIMENZIONALNU BEZUVJETNU LOKALNU OPTIMIZACIJU 1

Fajl koji je korišćen može se naći na

PRIPADNOST RJEŠENJA KVADRATNE JEDNAČINE DANOM INTERVALU

Red veze za benzen. Slika 1.

Uvod u relacione baze podataka

LINEARNI MODELI STATISTIČKI PRAKTIKUM 2 2. VJEŽBE

Metode izračunavanja determinanti matrica n-tog reda

Mehurasto sortiranje Brzo sortiranje Sortiranje učešljavanjem Sortiranje umetanjem. Overviev Problemi pretraživanja Heš tabele.

Quasi-Newtonove metode

Metode praćenja planova

COMPARISON OF LINEAR SEAKEEPING TOOLS FOR CONTAINERSHIPS USPOREDBA PROGRAMSKIH ALATA ZA LINEARNU ANALIZU POMORSTVENOSTI KONTEJNERSKIH BRODOVA

Formule za udaljenost točke do pravca u ravnini, u smislu lp - udaljenosti math.e Vol 28.

KRITERIJI KOMPLEKSNOSTI ZA K-MEANS ALGORITAM

Fibonaccijev brojevni sustav

KLASIFIKACIJA NAIVNI BAJES. NIKOLA MILIKIĆ URL:

pretraživanje teksta Knuth-Morris-Pratt algoritam

Sveučilište Josipa Jurja Strossmayera u Osijeku Odjel za matematiku

Maja Antolović Algoritmi u teoriji brojeva

Geometrijski smisao rješenja sustava od tri linearne jednadžbe s tri nepoznanice

Hornerov algoritam i primjene

Ariana Trstenjak Kvadratne forme

Šime Šuljić. Funkcije. Zadavanje funkcije i područje definicije. š2004š 1

Prsten cijelih brojeva

Pellova jednadžba. Pell s equation

Zadatci sa ciklusima. Zadatak1: Sastaviti progra koji određuje z ir prvih prirod ih rojeva.

PORAVNANJE VIŠE NIZOVA. Neven Grubelić PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK. Diplomski rad

Matrice u Maple-u. Upisivanje matrica

Ksenija Doroslovački KOMBINATORIKA INTERPRETIRANA FUNKCIJAMA I NJIHOVIM OSOBINAMA MASTER RAD. NOVI SAD jun 2008

NIZOVI I REDOVI FUNKCIJA

UNIVERZITET U BEOGRADU MATEMATIČKI FAKULTET

Teorem o reziduumima i primjene. Završni rad

PARALELNI ALGORITMI ZA PROBLEM GRUPIRANJA PODATAKA

Funkcijske jednadºbe

1.1 Algoritmi. 2 Uvod

Vedska matematika. Marija Miloloža

Sveučilište u Zagrebu Fakultet prometnih znanosti Diplomski studij. Umjetna inteligencija - Genetski algoritmi 47895/47816 UMINTELI HG/

ALGORITMI. Pojam algoritma Blok dijagram

ANALYTICAL AND NUMERICAL PREDICTION OF SPRINGBACK IN SHEET METAL BENDING

Zanimljive rekurzije

O aksiomu izbora, cipelama i čarapama

Pitagorine trojke. Uvod

FIZIKALNA KOZMOLOGIJA VII. VRLO RANI SVEMIR & INFLACIJA

SITO POLJA BROJEVA. Dario Maltarski PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK. Diplomski rad. Voditelj rada: Doc. dr. sc.

Nelder Meadova metoda: lokalna metoda direktne bezuvjetne optimizacije

Shear Modulus and Shear Strength Evaluation of Solid Wood by a Modified ISO Square-Plate Twist Method

6. PROGRAMSKE STRUKTURE STRUKTUIRANOG PROGRAMIRANJA

ANALYSIS OF THE RELIABILITY OF THE "ALTERNATOR- ALTERNATOR BELT" SYSTEM

Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni preddiplomski studij matematike. Ivana Oreški REKURZIJE.

BROJEVNE KONGRUENCIJE

Keywords: anticline, numerical integration, trapezoidal rule, Simpson s rule

Algoritam za odre divanje ukupnog poravnanja dva grafa poravnanja parcijalnog ure daja

Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku. Velibor Gojić. Blok dizajni. Diplomski rad. Osijek, 2014.

Vektori u ravnini i prostoru. Rudolf Scitovski, Ivan Vazler. 10. svibnja Uvod 1

Položaj nultočaka polinoma

ODREĐIVANJE DINAMIČKOG ODZIVA MEHANIČKOG SUSTAVA METODOM RUNGE-KUTTA

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Preddiplomski sveučilišni studij matematike. Završni rad. Tema : Vedska matematika

Rešenja zadataka za vežbu na relacionoj algebri i relacionom računu

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku DIOFANTSKE JEDNADŽBE

Metoda parcijalnih najmanjih kvadrata: Regresijski model

DISTRIBUIRANI ALGORITMI I SISTEMI

STATISTICAL ANALYSIS OF WET AND DRY SPELLS IN CROATIA BY THE BINARY DARMA (1,1) MODEL

ALGORITAM FAKTORIZACIJE GNFS

Mode I Critical Stress Intensity Factor of Medium- Density Fiberboard Obtained by Single-Edge- Notched Bending Test

The existence theorem for the solution of a nonlinear least squares problem

Sveučilište J.J.Strossmayera u Osijeku Odjel za matematiku. Sveučilišni preddiplomski studij matematike

Diferencijska evolucija

ANALYSIS OF INFLUENCE OF PARAMETERS ON TRANSFER FUNCTIONS OF APERIODIC MECHANISMS UDC Života Živković, Miloš Milošević, Ivan Ivanov

Uvod u analizu (M3-02) 05., 07. i 12. XI dr Nenad Teofanov. principle) ili Dirihleov princip (engl. Dirichlet box principle).

Product Function Matrix and its Request Model

MATHEMATICAL ANALYSIS OF PERFORMANCE OF A VIBRATORY BOWL FEEDER FOR FEEDING BOTTLE CAPS

Uvod u dinamičko programiranje

U člnaku se nastoji na jednostavan i sažet način bez ulaženja u egzaktne i formalizirane dokaze postići slijedeće:

VELOCITY PROFILES AT THE OUTLET OF THE DIFFERENT DESIGNED DIES FOR ALUMINIUM EXTRUSION

DES I AES. Ivan Nad PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK. Diplomski rad. Voditelj rada: doc.dr.sc.

Mostovi Kaliningrada nekad i sada

Matrične dekompozicije i primjene

APPROPRIATENESS OF GENETIC ALGORITHM USE FOR DISASSEMBLY SEQUENCE OPTIMIZATION

EXPERIMENTAL ANALYSIS OF THE STRENGTH OF A POLYMER PRODUCED FROM RECYCLED MATERIAL

The Bond Number Relationship for the O-H... O Systems

Ivan Soldo. Sažetak. U članku se analiziraju različiti načini množenja matrica. Svaki od njih ilustriran je primjerom.

Nekoliko kombinatornih dokaza

Matematika (PITUP) Prof.dr.sc. Blaženka Divjak. Matematika (PITUP) FOI, Varaždin

Metrički prostori i Riman-Stiltjesov integral

Simetrične matrice, kvadratne forme i matrične norme

ALGORITMI ZA ISPITIVANJE DJELJIVOSTI

HRVATSKA MATEMATIČKA OLIMPIJADA

Sveučilište u Zagrebu Prirodoslovno matematički fakultet

THE ROLE OF SINGULAR VALUES OF MEASURED FREQUENCY RESPONSE FUNCTION MATRIX IN MODAL DAMPING ESTIMATION (PART II: INVESTIGATIONS)

Mirela Nogolica Norme Završni rad

An Algorithm for Computation of Bond Contributions of the Wiener Index

Asocijativna polja POGLAVLJE Ključevi kao cijeli brojevi

Transcription:

Osječki matematički list 5(2005), 21 28 21 STUDENTSKA RUBRIKA Sortiranje podataka Alfonzo Baumgartner Stjepan Poljak Sažetak. Ovaj rad prikazuje jedno od rješenja problema sortiranja podataka u jednodimenzionalnom polju (nizu) elemenata. U praksi se često pojavljuje potreba za sortiranjem podataka te se zbog toga traži što efikasniji i brži algoritam. U ovom radu detaljno je prikazan jedan od najboljih merge-sort algoritam. Napravljene su i praktične izvedbe algoritama za sortiranje koje su testirane na različitim skupovima podataka. Ključne riječi: algoritmi za sortiranje, merge-sort, rekurzivni algoritmi Data sorting Abstract. In this paper one solution of the problem of sorting an one-dimensional vector (array) of data is shown in this paper. A need for data sorting very often arises in the practice and therefore we are constantly searching for more efficient and faster sorting algorithms. One of the best sorting algorithms merge-sort is shown in this paper in detail. We made two of sorting algorithms and tested them on different types of data. 1. Uvod Key words: sorting algorithms, merge-sort, recursive algorithms 1.1. Nizovi kao strukture podataka Jednodimenzionalno polje (niz) je linearna struktura podataka u koju možemo smjestiti više podataka istog tipa. Primjerice u programskom jeziku C, indeksiranje niza počinje od 0, tj. prvi element u nizu je na mjestu 0, a zadnji na mjestu N 1, gdje je N duljina niza. Elektrotehnički Fakultet, Sveučilište u Osijeku, Kneza Trpimira 2b, HR-31 000 Osijek, e-mail: baumgart@etfos.hr Odjel za matematiku, Sveučilište u Osijeku, Gajev trg 6, HR-31 000 Osijek, e-mail: spoljak@hotmail.com

22 Alfonzo Baumgartner i Stjepan Poljak Slika 1. Shematski prikaz niza u programskom jeziku C Ako želimo koristiti niz, potrebna je i naredba deklaracije koja izgleda ovako: tip ime[n]; gdje su: tip tip podataka niza, jednostavni (int, char, float...) ili izvedeni; ime ime niza, zadaje se kao i ime obične varijable (skalara); N konstanta, tj. prirodni broj koji označava duljinu niza. Općenito, niz je potpuno definiran s gore navedenom trojkom: tipom, imenom i svojom duljinom. U ovom radu, niz je osnovna struktura podataka. Ako su elementi niza med usobno usporedivi, onda se takav niz elemenata može sortirati. Sortirati znači poredati elemente niza od najmanjeg do najvećeg, tj. uzlazno ili od najvećeg do najmanjeg, tj. silazno. Dva spomenuta načina sortiranja su dualni, a to znači ako riješimo jedan problem, vrlo se lako dolazi i do rješenja drugoga. Zato ćemo mi u ovom radu promatrati samo problem uzlaznog sortiranja. 1.2. Rekurzivne funkcije Kako bi objasnili jedan od najboljih algoritama za sortiranje danas, moramo se najprije upoznati s pojmom rekurzivnosti: Svaka funkcija koja unutar svoje definicije poziva samu sebe naziva se rekurzivna funkcija. Kakonebidošlo do neograničenog broja poziva, tj. kopija takve funkcije u memoriji uvijek mora postojati i neki nerekurzivni put izlaska iz takve funkcije. Rekurzivnim stablom možemo prikazati rad rekurzivne funkcije kako bi si lakše predočili kako jedan rekurzivni algoritam zapravo funkcionira. Većina programskih jezika, pa tako i primjerice C, podržava rekurzije kod funkcija. Dan je i primjer jedne vrlo jednostavne rekurzivne funkcije. Primjer 1. Napisati rekurzivnu C funkciju koja će ispisati niz od N cjelobrojnih podataka. Rješenje: void Ispis ( int V[], int i, int N) { if (i>=n i <0) return ; printf( %d\n, V[ i ] ); Ispis ( V, i+1, N ); Ova funkcija sastoji se od tri naredbe. Prva naredba predstavlja nerekurzivni izlazak iz funkcije i osigurava ispravan rad. Druga naredba ispisuje i-ti element niza

Sortiranje podataka 23 na ekran, dok je treća naredba rekurzivni poziv iste te funkcije i zbog toga je Ispis rekurzivna funkcija. Zadatak za vježbu: što se mijenja u radu ove funkcije ako zamijenimo mjesta drugoj i trećoj naredbi? 2. Algoritmi za sortiranje U znanosti je problem sortiranja još uvijek aktualan i traže se bilo kakve mogućnosti ubrzanja, tako da se nedavno došlo do otkrića algoritma intro-sort koji je kombinacija dvaju već poznatih algoritma za sortiranje, a sam je brži od svakog pojedinačno. U najnižu klasu spadaju najjednostavniji, ali i najsporiji algoritmi kao što su to primjerice algoritami bubble-sort ili selection-sort, dok u najvišu klasu spadaju algoritmi poput quick-sort i merge-sort. Cilj ovog rada jest ukazati na razlike ovih dviju klasa algoritama. Kod svih ovih algoritama ulazni parametar je isti niz V od N elemenata, a problem je sortirati elemente niza uzlazno. 2.1. Selection-sort algoritam Ideja jednog od najjednostavnijih algoritama selection-sort se sastoji u sljedećem: u zadanom nizu pronaći svaki element koji je manji od onog koji se nalazi na prvom mjestu i ako je manji zamijeniti ga s tim elementom koji je na prvom mjestu. Tako ćemo na kraju dobiti najmanji element na prvom mjestu. Postupak se tako dalje ponavlja za preostale elemente od drugog do zadnjeg mjesta. Znači dobivamo poredan niz od najmanjeg elementa na prvom mjestu, dok će na zadnjem mjestu ostati najveći element. Vro je jednostavno ostvariti ovakav algoritam u bilo kojem programskom jeziku. Evo jednog rješenja u programskom jeziku C: for (i=0; i<n 1; i ++) for (j=i+1; j<n ; j ++) if (V[ i ]>V[ j ]) { t=v[ i ]; V[ i]=v[ j ]; V[ j]=t ; Primjedba: lako je dobiti i algoritam koji sortira silazno, dovoljno bi bilo u trećem retku znak > prebaciti u <. Analiza rada: Sada trebamo odrediti složenost ovoga algoritma, tj. naći nekakvu mjeru njegove brzine i odrediti o čemu ta brzina ovisi. Jasno je da duljina niza N ima presudan značaj. Manji značaj ima i tip elemenata niza, jer za neke složenije tipove podataka usporedba je puno kompliciranija nego za neke jednostavnije tipove podataka. Nadalje, u ovoj jednostavnoj analizi, gledat ćemo samo utjecaj duljine niza N. U prvoj iteraciji vanjske petlje po brojaču i, imamo N 1 ponavljanja unutarnje petlje po brojaču j. Svakisljedeći put imamo jedno ponavljanje manje. Sada lagano možemo izračunati broj ponavljanja U s : U s =(N 1) + (N 2) + +3+2+1= (N 1)N 2 = N 2 N. 2

24 Alfonzo Baumgartner i Stjepan Poljak Ovu jednakost je lako dokazati ako zbrajamo prvi član sume sa zadnjim, drugi s predzadnjim itd. Ne smijemo nikako zanemariti onaj N 2 koji smo dobili u brojniku rezultata. Vidjet ćemo i na praktičnim primjerima na kraju ovog rada kakav je značaj toga kvadrata na brzinu izvod enja sortiranja. Naposlijetku, zaključimo da je algoritam selection-sort tzv. kvadratne složenosti, tj. nazovimo tako ovu klasu sporijih algoritama za sortiranje. Vidjet ćemo da ni to što se od tih N 2 oduzima N itosve dijeli s dva ne pomaže puno, tj. i dalje imamo dosta spor algoritam. 2.2. Merge-sort algoritam Upotrijebljena je dobro poznata ideja podijeli pa vladaj na sljedeći način: Niz V se podijeli na lijevi i desni dio otprilike po polovici, nakon toga se rekurzivno sortira posebno lijevi i posebno desni dio, te se nakon toga niz ponovno spaja u jedan sortirani niz. Spajanje (engl. merge) je sada jednostavno jer je lijevi i desni dio već sortiran. Rad algoritma se može opisati ovako: niz se prepolovi, pa se nakon toga i te polovice prepolove, sve dok se ne dod e do niza duljine 1. Polovice duljine 1 se dalje ne raspolavljaju jer one već jesu sortirani nizovi, postupak spajanja će napraviti ostatak posla. Osnovna ideja se može malo detaljnije opisati sljedećim algoritmom: Sort(V,d,g) ako je g d<=1kraj s = d+g 2 Formiraj VL= {V d,...,v s Formiraj VD= {V s+1,...,v g Sort(VL,d,s) Sort(VD,s+1,g) V=Merge(VL,VD) Sort je rekurzivna funkcija koja sortira niz V sa zadanom donjom granicom d i gornjom granicom g. Prvu točku možemo opisati kao nerekurzivni izlazak iz funkcije, od druge do četvrte točke imamo razdvajanje niza V na lijevi VLi desni VD dio. U petoj i šestoj točki imamo dva rekurzivna poziva iste funkcije samo s malo drugačijim parametrima. U sedmoj točki funkcije Sort nije detaljno opisan postupak spajanja lijevog i desnog dijela niza koji su već sortirani natrag u V. Postupak spajanja detaljno je opisan u sljedećem primjeru izvedbe merge-sort algoritma u programskom jeziku C: void MergeSort ( tippod V[], int d, int g ) { if (d==g) return ; // Nerekurzivni izlazak iz funkcije int s = (g d)/2; int n1=s+1, n2, i ; if ((g d)%2==1) n2=n1 ; else n2=n1 1;

Sortiranje podataka 25 tippod VL = new tippod [n1 ]; tippod VD = new tippod [n2 ]; // Rastavi niz V na lijevi i desni dio VL i VD for (i=0; i<n1 ; i ++) VL [ i ] = V [ d+i ] ; for (i=0; i<n2 ; i ++) VD[ i ] = V [ d+i +s + 1 ] ; MergeSort ( VL, 0, n1 1 ); // Rekurzivni poziv (Sortiraj lijevi dio) MergeSort ( VD, 0, n2 1 ); // Rekurzivni poziv ( Sortiraj desni dio) // Spoji VL i VD u jedan V. (Merge) i=0; int k, i1=0, i2=0; for (k=0; k<n1+n2 ; k++) { if (i1<n1 && i2<n2 ) { if (VL[ i1]<vd[ i 2 ] ) V [ dg+ i ++]=VL [ i 1 ++]; else V [ dg+i ++]=VD[ i 2 ++]; else { if (i1<n1) V [ dg+i ++]=VL [ i 1 ++]; else V [ dg+i ++]=VD[ i 2 ++]; delete [] VL; delete [] VD; Analiza rada: Pokušajmo sada opet u terminima duljine niza N odrediti složenost, tj. brzinu rada ovakvog algoritma. Najprije moramo reći da dio koji spaja (merge) lijevi i desni dio ukupne duljine M napravi to u točno M ponavljanja. To se očigledno može vidjeti iz gore navedenog primjera u C-u gdje se petlja ponavljatočno n1+n2puta, gdje su n1 in2 redomduljine lijevogi desnog dijela bilo kojeg podniza zadanog niza V. Med utim, kako odrediti ukupni broj ponavljanja kada imamo rekurzivnu funkciju?! To je općenito teži problem, ali u ovom slučaju dosta će nam pomoći rekurzivno stablo prikazano na Slici 2. Slika 2. Prikaz rekurzivnog stabla koje generira rekurzivna funkcija MergeSort prilikom izvod enja Rekurzivno stablo nam pomaže tako što možemo utvrditi da se na svakom nivou stabla uvijek nalazi ukupno N elemenata niza bez obzira da li je niz V razbijen na 2 ili više dijelova, pa sve do zadnjeg nivoa gdje se mogu naći samo nizovi duljine 1.

26 Alfonzo Baumgartner i Stjepan Poljak Većsmoreklidasesvakadvadijelamorajuspajatiujedanveći i koliko to traje. To znači da po svakom nivou imamo najviše N ponavljanja jer svi podnizovi skupa imaju najviše N elemenata po nivou. Broj nivoa označen je s L, pa imamo ukupni broj ponavljanja U m za merge-sort algoritam od U m = N L. Ostaje nam još samo utvrditi ovisi li L o ukupnom broju elemenata u nizu N. Lako se pokaže da ovisi i egzaktno se može izračunati da je uvijek L = log 2 N, patako dobivamo konačno U m = N log 2 N. Ova analiza rada je točna za svakin koji je potencija broja 2. Za ostale N analiza je malo kompliciranija, ali se dobije isti rezultat. Ovakvu klasu algoritama nazovimo N log N. Usporedimo sada ukupne brojeve ponavljanja za merge sort U m i za selection sort U s. Lako se vidi da su oni sličnog reda veličine samo za dosta male duljine nizova N, med utim, za sve veće vrijednosti broja N (tj. za sve dulje nizove), razlika postaje sve veća u korist U m (tj. merge sort je brži). Odnos ovih dviju veličina najbolje pokazuje Slika 3. Slika 3. Ovisnost ukupnog broja ponavljanja o duljini niza N Sa Slike 3 jasno je vidljivo da su opisana dva algoritma usporediva samo za vrlo male vrijednosti N. Znači, teorijski rezultat jest da za svaki veći N uvijek trebamo koristiti merge-sort algoritam, jer je višestruko brži. 3. Eksperimentalni rezultati Na različitim tipovima podataka testirani su algoritmi selection-sort i mergesort. Mjereno je vrijeme 1 izvod enja za različite duljine nizova N idobivenisu rezultati prikazani u Tablicama 1 i 2. 1 Testiranje je izvedeno na računalu s procesorom Intel Pentium 4, 2.40GHz i RAM memorijom od 256MB.

Sortiranje podataka 27 N 1000 2000 5000 10000 20000 50000 100000 200000 500000 t selection [ms] 16 47 219 922 3672 22656 86094 299297 1425812 t merge [ms] < 1 < 1 15 15 31 78 171 344 922 Tablica 1. Rezultati sortiranja realnih brojeva tipa float N 1000 2000 5000 10000 20000 50000 100000 200000 500000 t selection [ms] 31 125 719 2453 8391 50297 189140 686500 4286922 t merge [ms] < 1 15 15 16 32 109 234 516 1469 Tablica 2. Rezultati sortiranja nizova znakova (riječi) Na Slici 4 prikazani su dobiveni rezultati za sortiranje realnih brojeva (Tablica 1) grafički. Vidljivo je da ovi eksperimentalni rezultati odgovaraju teorijskim koji su analizirani u prethodnoj točki s prikazom na Slici 3. Slika 4. Izmjereni rezultati izvršavanja algoritama za sortiranje na nizovima realnih brojeva različite duljine 4. Zaključak Iako je selection-sort algoritam naizgled puno jednostavniji, merge-sort je puno efikasniji što je pokazano u ovom radu i teorijski i eksperimentalno. No, ipak trebamo naposlijetku utvrditi da merge-sort ipak ima malo uvećane memorijske zahtjeve za razliku od selection-sort koji koristi samo zadani niz V. Algoritam merge-sort osim zbog svoje rekurzivnosti (sjetimo se da svaki rekurzivni poziv stvara novu kopiju te funkcije u memoriji sa svim njenim internim varijablama) unutar same funkcije stvara još jedan niz osim onog koji je došao kao parametar. Taj uvećani memorijski zahtjev ipak nije toliko značajan kolika je razlika u brzini izvod enja što se dobro vidi iz eksperimentalnih rezultata pogotovu za veće duljine niza N. Ova dva algoritma nisu jedini korišteni u praksi algoritmi za sortiranje, ali su jako reprezentativni, jer svi ostali zapravo spadaju u jednu od dvije klase složenosti ovdje prezentirane ( kvadratna i N log N složenost) ili im je brzina negdje izmed u. Med u ostalima, tu su još od poznatijih bubble-sort, quick-sort, heap-sort, insert-sort.

28 Alfonzo Baumgartner i Stjepan Poljak Najbrži danas korišten algoritam za sortiranje je introspective-sort. Taj hibridni algoritam zapravo je kombinacija dvaju već poznatih quick-sort i heapsort. Naime, kada program detektira da se nekoliko puta za redom nailazi na loš raspored elemenata za quick-sort i da bi u tom slučaju došlo do kvadratnog očekivanog vremena izvod enja, on se prebacuje na heap-sort koji je tada bitno bolji. Više o tome i sam algoritam može se pogledati u [2]. Naposlijetku, spomenimo da podaci ne moraju biti uvijek smješteni u nizovima linearno u memoriji (znači jedan iza drugoga) već mogu biti smješteni i u tzv. vezanim listama, a baš otomenačinu smještanja podataka takod er ovisi odabir najboljeg algoritma za sortiranje. Ovdje navedeni merge-sort algoritam zapravo postiže još bolje rezultate kada su podaci smješteni u vezanim listama, a ne u nizovima (jednodimenzionalnim poljima). Što su vezane liste i kako se podaci smještaju u njih nadilazi tematiku ovoga rada pa ih nećemo detaljnije objašnjavati. Literatura [1] T.H.Cormen, C.E.Leiserson, R.L.Rivest, C.Stein, Introduction to Algorithms, 2nd edition, MIT Press, Massachusetts, 2001, 123 164. [2] D. R. Musser, Introspective Sorting and Selection Algorithms, Software Practice and Experience (8)(1997), 983 993. [3] D. Knuth, The Art of Computer Programming, Sorting and Searching, Second Edition, Reading, Massachusetts: Addison-Wesley, 1998.