X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=spa2-teorijske-vezbe.git;a=blobdiff_plain;f=03.%20Shaker%20sort%2Fkod%2FSHAKER.MOD;fp=03.%20Shaker%20sort%2Fkod%2FSHAKER.MOD;h=5f1ef39c950351b74a041d15f6d18e33e233648e;hp=0000000000000000000000000000000000000000;hb=9ad1d404ff03e0b20719bd69603f78c08691e681;hpb=611ac746b2ddff514584eb7e563f25155187dace diff --git a/03. Shaker sort/kod/SHAKER.MOD b/03. Shaker sort/kod/SHAKER.MOD new file mode 100644 index 0000000..5f1ef39 --- /dev/null +++ b/03. Shaker sort/kod/SHAKER.MOD @@ -0,0 +1,80 @@ +MODULE Shaker; + + FROM IO IMPORT + WrCard, WrStr, RdCard, WrLn, OK; + + CONST + Max = 10; + + TYPE + Indeks = [1 .. Max]; + NizTip = ARRAY Indeks OF CARDINAL; + + VAR + Niz: NizTip; + + PROCEDURE Unos(VAR Niz: NizTip); + VAR + i: Indeks; + BEGIN + FOR i:= 1 TO Max DO + REPEAT + WrStr('Unesite '); + WrCard(i, 2); + WrStr('. clan niza: '); + Niz[i]:= RdCard(); + WrLn; + UNTIL OK; + END; + END Unos; + + PROCEDURE Ispis(VAR Niz: NizTip); + VAR + i: Indeks; + BEGIN + FOR i := 1 TO Max - 1 DO + WrCard(Niz[i], 1); + WrStr(', '); + END; + WrCard(Niz[Max], 1); + END Ispis; + + PROCEDURE ShakerSort(VAR Niz: NizTip); + VAR + Levi, Desni, i, ZadnjiMenjan: Indeks; + Temp: CARDINAL; + BEGIN + Levi:= 2; + Desni:= Max; + ZadnjiMenjan:= Max; + REPEAT + FOR i:= Desni TO Levi BY -1 DO + IF Niz[i - 1] > Niz[i] THEN + Temp:= Niz[i - 1]; + Niz[i - 1]:= Niz[i]; + Niz[i]:= Temp; + ZadnjiMenjan:= i; + END; + END; + Levi:= ZadnjiMenjan + 1; + FOR i:= Levi TO Desni DO + IF Niz[i - 1] > Niz[i] THEN + Temp:= Niz[i - 1]; + Niz[i - 1]:= Niz[i]; + Niz[i]:= Temp; + ZadnjiMenjan:= i; + END; + END; + Desni:= ZadnjiMenjan - 1; + UNTIL Levi > Desni; + END ShakerSort; + +BEGIN + Unos(Niz); + WrStr('Unesen niz: '); + Ispis(Niz); + WrLn; + WrStr('Sortiran niz: '); + ShakerSort(Niz); + Ispis(Niz); +END Shaker.