home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Media Share 9
/
MEDIASHARE_09.ISO
/
progmisc
/
euphor10.zip
/
SHELL.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-06-01
|
2KB
|
79 lines
program main(input, output);
{ Shell Sort Benchmark }
const
ITERATIONS = 20000;
NITEMS = 50;
var
list: array[1..NITEMS] of integer;
x: array[1..NITEMS] of integer;
i, j, t: integer;
procedure shell_sort;
{ Shell sort based on insertion sort }
var
i, gap, j, n: integer;
tempi, tempj: integer;
stop, stop2: boolean;
begin
gap := NITEMS div 4 + 1;
stop := false;
while not stop do
begin
for i := gap + 1 to NITEMS do
begin
tempi := x[i];
j := i - gap;
stop2 := false;
while not stop2 do
begin
tempj := x[j];
if tempi >= tempj then
begin
j := j + gap;
stop2 := true;
end
else
begin
x[j+gap] := tempj;
if j <= gap then
stop2 := true
else
j := j - gap;
end;
end;
x[j] := tempi;
end;
if gap = 1 then
stop := true
else
gap := gap div 4 + 1;
end;
end;
begin
list[1] := 9; list[2] := 34; list[3] := 14; list[4] := 18;
list[5] := 33; list[6] := 46; list[7] := 11; list[8] := 13;
list[9] := 7; list[10] := 26; list[11] := 22; list[12] := 10;
list[13] := 36; list[14] := 40; list[15] := 2; list[16] := 28;
list[17] := 32; list[18] := 1; list[19] := 23; list[20] := 31;
list[21] := 43; list[22] := 5; list[23] := 24; list[24] := 42;
list[25] := 45; list[26] := 50; list[27] := 16; list[28] := 3;
list[29] := 47; list[30] := 39; list[31] := 21; list[32] := 49;
list[33] := 41; list[34] := 6; list[35] := 19; list[36] := 30;
list[37] := 20; list[38] := 35; list[39] := 44; list[40] := 38;
list[41] := 25; list[42] := 15; list[43] := 27; list[44] := 17;
list[45] := 8; list[46] := 4; list[47] := 29; list[48] := 37;
list[49] := 48; list[50] := 12;
for i := 1 to ITERATIONS do
begin
for j := 1 to NITEMS do
x[j] := list[j];
shell_sort;
end;
for i := 1 to NITEMS do
write(x[i]);
end.