-
Notifications
You must be signed in to change notification settings - Fork 0
/
shellsortdemo.pas
120 lines (110 loc) · 3.1 KB
/
shellsortdemo.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
program ShellSortDemo;
uses Crt,Graph,Drivers;
const
N = 639; { number of columns : x-coordinates }
Range = 199; { actual size : y-coordinates }
NoPixelColor = Black;
PixelColor = LightGreen;
var
K: Integer;
Num,Loops,Swaps,Aloops,Aswaps: real;
A: array [1..N] of Integer;
procedure Swap ( var X,Y:Integer );
var
Temp: Integer;
begin
Temp := X;
X := Y;
Y := Temp;
Swaps := Swaps + 1;
end; { Swap }
procedure ShellSort ;
var
I,J,Incr:Integer;
begin
Incr := N div 2;
while Incr > 0 do
begin
for I := Incr + 1 to N do
begin
J := I - Incr;
Loops := Loops + 1;
while J > 0 do
if A[J] > A[J+Incr] then
begin
Loops := Loops + 1;
PutPixel (J,A[J],NoPixelColor);
PutPixel ((J+Incr),A[J+Incr],NoPixelColor);
Swap (A[J],A[J+Incr]);
PutPixel (J,A[J],PixelColor);
PutPixel ((J+Incr),A[J+Incr],PixelColor);
J := J - Incr;
end
else J := 0;
end;
Incr := Incr div 2;
end;
end; { ShellSort }
var
GraphDriver,GraphMode: Integer;
TempStr,TempStr1,TempStr2: string;
CH: Char;
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
TempStr1 := '';
TempStr2 := '';
SetColor(Yellow);
for K:=1 to N do
begin
Num := Range*Random;
A[K] := Trunc (Num);
PutPixel (K,A[K],PixelColor);
end;
SetBkColor(Black);
{ Sorting start }
Loops := 0;
Swaps := 0;
Delay (1000);
ShellSort ;
Aloops := Loops;
Aswaps := Swaps;
TempStr := 'Shell Sort: a) Loops, Swaps: ';
Str(Loops:7:3,TempStr1);
Str(Swaps:7:3,TempStr2);
TempStr := TempStr + TempStr1 + ', ' + TempStr2;
OutTextXY (0,300,TempStr);
SetColor(LightCyan);
OutTextXY (0,320,'Press any key to process with an array');
OutTextXY (0,330,'already sorted but in opposite direction.');
repeat until KeyPressed;
CH := ReadKey; if CH = #0 then CH := ReadKey;
ClearDevice;
for K:=1 to N do
begin
Num := (N-K)/(N/Range);
A[K] := Trunc (Num);
PutPixel (K,A[K],PixelColor);
end;
{ Sorting start }
Loops := 0;
Swaps := 0;
Delay (1000);
ShellSort ;
TempStr := 'Shell Sort: a) Loops, Swaps: ';
Str(Aloops:7:3,TempStr1);
Str(Aswaps:7:3,TempStr2);
TempStr := TempStr + TempStr1 + ', ' + TempStr2;
SetColor(Yellow);
OutTextXY (0,300,TempStr);
TempStr := ' b) Loops, Swaps: ';
Str(Loops:7:3,TempStr1);
Str(Swaps:7:3,TempStr2);
TempStr := TempStr + TempStr1 + ', ' + TempStr2;
OutTextXY (0,310,TempStr);
SetColor(LightCyan);
OutTextXY (0,330,'Press any key to exit.');
repeat until KeyPressed;
CH := ReadKey; if CH = #0 then CH := ReadKey;
TextMode(LastMode);
end.