вот для затравки начало напишу. чуть чуть доделать остается
все делать будем через процедуры и функции. и еще нам потребуется свой тип данных (чтобы правильно функцию оформить). Общий смыл такой заполняем произвольно массив потом дважды вызываем метод сортировки. При этом сначала сортируется безпорядочный массив, а вторым проходом соответсвенно упорядочный. Повторям для каждого метода сортировки. Пока сделал для двух методов сортировки.
Код:
program OverLord;
uses crt;
const
X = 10;
Y = 10;
type TMC = record
M:integer;
C:integer;
end;
var
A:array [1..X] of integer;
i,j,k:integer;
Count:TMC;
procedure FillRandom;
begin
randomize;
for i:=1 to X do
A[i]:=random(1000) - 500;
end;
procedure PrintArray;
begin
for i:=1 to X do
begin
write(A[i]);
if i<>X then write(', ') else write('.');
end;
writeln;
end;
Function SortLineSelect:TMC;
var
i, j, min, t : integer;
begin
SortLineSelect.M:=0;
SortLineSelect.C:=0;
for i:=1 to X-1 do
begin
min := i;
for j:=i+1 to X do
begin
if A[j]<A[min] then min := j;
inc(SortLineSelect.M);
end;
{вот этого условия в теории не было
и алгоритм переставлял местами элемент сам с собой
перестановок насчитывалось столько же сколько и при сортировке
упорядоченного массива.
Я точно не знаю является ли такая добавка усовершенствованием
массива или нет, так что если что просто убери это условие}
if min<>i then
begin
{ раз перестановка}
t := A[min];
inc(SortLineSelect.C);
{два перестановка}
A[min] :=A[i];
inc(SortLineSelect.C);
{три перестановка}
A[i] := t;
inc(SortLineSelect.C);
end;
end;
end;
function SortBubble:TMC;
var i, j, t : integer;
begin
SortBubble.M:=0;
SortBubble.C:=0;
for i:=2 to X do
for j:=X downto i do
begin
inc(SortBubble.M);
if A[i-1]>A[j] then
begin
t:=A[j-1];
inc(SortBubble.C);
A[j-1]:=A[j];
inc(SortBubble.C);
A[j]:=t;
inc(SortBubble.C);
end;
end;
end;
BEGIN
clrscr;
for k:= 1 to 2 do
begin
{произвольно заполняем массив}
FillRandom;
{печатаем массив на экране}
write('Первыоначальный массив: ');
PrintArray;
{сортируем и считаем сравнения с перестановками}
case k of
1:Count:=SortLineSelect;
2:Count:=SortBubble;
end;
write('при сортировке не упорядоченного массива имеем: ');
writeln(Count.M,', сравнений и ', Count.C, ' перестановок');
{сортируем только что отсортированный массив}
case k of
1:Count:=SortLineSelect;
2:Count:=SortBubble;
end;
write('при сортировке упорядоченного массива имеем: ');
writeln(Count.M,', сравнений и ', Count.C, ' перестановок');
write('А так после сортировки: ');
PrintArray;
writeln('****************************');
end;
write('Нажмите Enter для выхода ...');
readln;
END.