Citat:
Chimera144:
P.S. Ako neko zeli moze da napise ShellSort jer me bas zanima kako izgleda.
Algoritam je napisan u MODULA-2 programskom jeziku, ali zbog njegove velike slicnosti
sa paskalom se nadam da cete bez problema moci da ga procitate...
Code:
PROCEDURE ShellSort(VAR a: niz);
CONST faktor = 2.55;
VAR i, j, granicai, prvi, korak : CARDINAL;
....temp : element; (* element niza, slog koji u sebi sadrzi polje kljuc na osnovu kog se elementi sortiraju *)
....rkraj, wnastavi : BOOLEAN;
BEGIN
....korak := maxniz; (* maxniz je konstanta koja oznacava maksimalnu velicinu niza kog sortiramo *)
....REPEAT
........korak := TRUNC(FLOAT(korak) / faktor); (* u svakom krugu petlje korak se smanjuje, dok ne dodje do 1 *)
........IF korak < 1 THEN
............korak := 1
........END;
........prvi := korak + 1;
........granicai := maxniz - korak;
........REPEAT
................DEC(prvi);
................i := prvi + korak;
................wnastavi := i <= maxniz;
................WHILE wnastavi DO
(* deo koji sledi je modifikovana verzija sortiranja umetanjem *)
........................IF a[i].kljuc < a[i-korak].kljuc THEN (* ovo je ono gore spomenuto polje kljuc *)
................................temp := a[i];
................................j := i;
................................REPEAT
........................................j := j - korak;
........................................a[j+korak] := a[j];
........................................IF j <= korak THEN
................................................rkraj := TRUE
........................................ELSE
................................................rkraj := a[j-korak].kljuc <= temp.kljuc
........................................END
................................UNTIL rkraj;
................................a[j] := temp;
........................END;
........................IF i <= granicai THEN
................................i := i + korak
........................ELSE
................................wnastavi := FALSE
........................END
................END
........UNTIL prvi = 1
....UNTIL kraj = 1
END ShellSort;
Osnovna ideja Shell-ovog sortiranja je da se niz podeli na podnizove tipa
(1, 1 + korak, 1 + 2*korak,.....)
(2, 2 + korak, 2 + 2*korak,.....)
......
(korak, korak + korak, korak + 2*korak,.....)
a svaki od ovih podnizova da se sortira umetanjem (niz se podeli na sortirani i nesortirani deo. uzima se prvi element
nesortiranog dela i 'umetne' se na odgovarajuce mesto u sortiranom delu)
Preuzeto iz knjige "Strukture podataka i algoritmi" Dr. Djura Paunic, Univerzitet u Novom Sadu, Prirodno-matematicki
Fakultet Novi Sad, 1997.
[
Ovu poruku je menjao mucky dana 11.08.2002 u 05:13 PM GMT]