Tömb feltöltése véletlen számokkal és az elemek elrendezése shell-rendezéssel, eljárások használatával (Shellrendezes.pas) program Shellrendezes; uses crt; var n:integer; a:array [1..300] of integer; procedure cserel(mit,mire:integer); var x:integer; begin x:=a[mit]; a[mit]:=a[mire]; a[mire]:=x; end; procedure feltolt; var i:integer; begin for i:=1 to n do begin a[i]:=trunc(90*random)+1; end; end; procedure kiir; var i:integer; begin for i:=1 to n do begin writeln(a[i]); end; end; procedure rendez(kezd,k:integer); A rendező eljárás, mellyel minden k-adik elemet összehasonlítjuk, szükség esetén cseréljük. var i,j:integer; begin i:=kezd+k; while(i<=n) do begin Hogy ha a átlépjük a tömb elemeinek számát, akkor a ciklus megáll. j:=i; while (j>k) do begin if (a[j]<a[j-k]) then begin cserel(j,j-k); j:=j-k; end else break; end; i:=i+k; end; end; procedure krendez(k:integer); Előrendezés eljárása. A benne lévő ciklus segítségével fogjuk meghívni a rendezést minden elemre. var i:integer; begin i:=1; while (i<=k) do begin Végigmegyünk minden tömbelemen. rendez(i,k); Meghívjuk az aktuális indexű elemre az aktuális lépésű (31,15...) előrendezést. i:=i+1; end; end; procedure shell; begin krendez(31); Előrendezéseket hajtunk végre, így gyorsítva a rendezési folyamatot. Az, hogy először a 31., majd a 15., 7., 3. és 1. elemeket rendezzük, kisérletezések során alakult ki. Ez a rendezés nagy elemszámú tömbök, vagy sorozatokat esetén ideális. Természetesen minden szám elrendezésre kerül. krendez(15); krendez(7); krendez(3); krendez(1); end; BEGIN clrscr; write('n:= '); readln(n); feltolt; writeln('A szamok rendezes elott:'); kiir; writeln(''); writeln('A szamok rendezes utan:'); shell; kiir; readkey; END.