На всякий случай задание: Разработать диалоговую программную систему, позволяющую оценить время выполнения различных алгоритмов упорядочения числовых массивов. Алгоритмы сортировки оформить в виде подпрограмм.
Код:
program sravnenie;
const
Nmax = 10000;
Np = 10;
Smax = 6;
type
Tvector = array[1..Nmax] of word;
Tstring = array[1..Smax] of string;
Tindex = 1..Nmax;
const
masstr: TString = ('input', 'bubble', 'insert', 'choice', 'output', 'exit');
function menu(s: TString; ns: word): word;
var
i: word;
k: word;
begin
for i := 1 to ns do
writeln(s[i]);
writeln('Введите номер пункта');
readln(k);
result := k;
end;
procedure input(var a: Tvector; n: word);
var
i: word;
c, d, e: Tvector;
begin
randomize;
writeln('Введите количество элементов массива');
readln(n);
for i := 1 to n do
a[i] := random(10000);
writeln('unsort.arr.');
for i := 1 to Np do
write(a[i]:8);
writeln;
c[i] := a[i];
d[i] := a[i];
e[i] := a[i];
end;
procedure bubble(var c: Tvector; n: word);
var
z: Tvector;
flag: boolean;
i, b: word;
t1, t2, time_bubble: real;
begin
t1 := Milliseconds;
flag := true;
while flag = true do
begin
flag := false;
for i := 1 to n - 1 do
begin
if c[i] > c[i + 1] then
begin
flag := true;
b := c[i];
c[i] := c[i + 1];
c[i + 1] := b;
end;
end;
end;
t2 := Milliseconds;
time_bubble := t2 - t1;
writeln('После сортировки пузырьком: ');
for i := 1 to Np do
write(c[i], ' ');
writeln;
writeln('Время сортировки пузырьком: ', time_bubble, 'ms');
z[i] := c[i];
end;
procedure insert(var d: Tvector; n: word);
var
i, R, k: word;
z: Tvector;
t3, t4, time_insert: real;
begin
t3 := Milliseconds;
for i := 2 to n do
if d[i - 1] > d[i] then
begin
R := d[i];
k := k - 1;
while (k > 0) and (d[k] > R) do
begin
d[k + 1] := d[k];
k := k - 1;
end;
d[k + 1] := R;
t4 := Milliseconds;
time_insert := t4 - t3;
end;
z[i] := d[i];
writeln('После сортировки вставками: ');
for i := 1 to Np do
write(z[i], ' ');
writeln;
writeln('Время сортировки вставками: ', time_insert, 'ms');
end;
procedure choice(var e: Tvector; n: word);
var
k, j, index: word;
min, i: word;
z: Tvector;
t5, t6, time_choice: real;
begin
t5 := Milliseconds;
for k := 1 to n - 1 do
begin
min := e[k];
index := k;
for j := k + 1 to n do
if e[j] < min then
begin
min := e[j];
index := j;
end;
e[index] := e[k];
e[k] := min;
t6 := Milliseconds;
time_choice := t6 - t5;
end;
z[i] := e[i];
writeln('После сортировки выбором: ');
for i := 1 to Np do
write(z[i], ' ');
writeln;
writeln('Время сортироки выбором: ', time_choice, 'ms');
end;
procedure output(var a, z: Tvector; Table: word);
var
i: word;
time_choice, time_insert, time_bubble: real;
begin
writeln('unsort_arr:');
for i := 1 to Np do
write(a[i]:8);
writeln;
begin
writeln(z);
writeln('Тип сортировки', ' ', 'Время работы');
writeln(z, ' ', (time_bubble):10, 'ms');
writeln(z, ' ', (time_insert):10, 'ms');
writeln(z, ' ', (time_choice):10, 'ms');
end;
begin
write('sort_arr:');
for i := 1 to Np do
write(z[i]:8);
writeln;
end;
end;
var
k, n, Table: word;
a, c, d, e, z: TVector;
begin
repeat
k := menu(masstr, Smax);
case k of
1: input(a, n);
2: bubble(c, n);
3: insert(d, n);
4: choice(e, n);
5: output(a, z, Table);
6: exit;
end;
until k = Smax;
end.