- •Ргр №1 по дисциплине: Информатика Тема: «Анализ методов сортировки массивов»
- •Оглавление
- •Введение
- •3) Расчетно-графическая часть.
- •3.1) График зависимости времени от размерности данных
- •3.2) Определение зависимости, которые наилучшим образом описывают получившиеся закономерности в пункте 3.1.
- •3.3) График зависимости количества перестановок в алгоритмах от размерности массива для значений из пункта 3.1.
- •3.4) Тестирование алгоритмов сортировки на пяти разных конфигурациях Компьютеров
- •Заключение
- •Программа:
- •Литература
Программа:
unit Unit7;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm7 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
Memo2: TMemo;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Label2: TLabel;
Edit2: TEdit;
Button4: TButton;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form7: TForm7;
var
N,i,Z,s,time1,time2: integer;
M,A,B:array [1..10000000] of Integer;
implementation
{$R *.dfm}
procedure TForm7.Button1Click(Sender: TObject);
begin
N:=StrToInt(Edit2.Text);
memo1.Lines.Clear;
memo2.Lines.Clear;
for i := 1 to N do
begin
M[i]:= -500000 + random(1000000);
end;
if n<40 then
for I := 1 to n do
memo1.Lines.Add(IntToStr(M[i]));
end;
procedure TForm7.Button2Click(Sender: TObject);
Var i,j,k: integer;
Min, Max:integer;
begin
memo2.Clear;
N:=StrToInt(Edit2.Text);
time1:=GetTickCount;
for i:=1 to N div 2 do
begin
if M[i]> M[i+1]then
begin
Min:=i+1;
Max:=i;
end
else
begin
Min:=i;
Max:=i+1;
end;
for j:=i+2 to n-i+1 do
if M[j]>M[Max] then
Max:=j
else
if M[j]<M[Min] then
Min:=j;
//обмен элементов
K:=M[i];
M[i]:=M[Min];
M[Min]:=K;
if Max=i then
Max:=Min;
K:=A[N-i+1];
A[N-i+1]:=A[max];
A[max]:=K;
end;
time2:=GetTickCount;
s:=time2-time1;
Edit1.Text:=IntToStr(s);
if n<40 then
for I := 1 to n do
memo2.Lines.Add(IntToStr(M[i]));
end;
procedure TForm7.Button3Click(Sender: TObject);
Var d,i,t: integer;
k : boolean; { пpизнак пеpестановки }
begin
memo2.Clear;
N:=StrToInt(Edit2.Text);
time1:=GetTickCount;
d:=N div 2; { начальное значение интеpвала }
while d>0 do
begin { цикл с yменьшением интеpвала до 1 }
{ пyзыpьковая соpтиpовка с интеpвалом d }
k:=true;
while k do
begin { цикл, пока есть пеpестановки }
k:=false; i:=1;
for i:=1 to N-d do
begin
{ сpавнение эл-тов на интеpвале d }
if M[i]>M[i+d] then
begin
t:=M[i];
M[i]:=M[i+d];
M[i+d]:=t; { пеpестановка }
k:=true; { пpизнак пеpестановки }
end; { if ... }
end; { for ... }
end; { while k }
d:=d div 2; { yменьшение интеpвала }
end; { while d>0 }
time2:=GetTickCount;
s:=time2-time1;
Edit1.Text:=IntToStr(s);
if n<40 then
for I := 1 to n do
memo2.Lines.Add(IntToStr(M[i]));
end;
Procedure Sliv(p,q : integer); {процедура сливающая массивы}
Var r,i,j,k : integer;
Begin
r:=(p+q) div 2;
i:=p;
j:=r+1;
for k:=p to q do
if (i<=r) and ((j>q) or (m[i]<m[j])) then
begin
b[k]:=m[i];
i:=i+1;
end
else
begin
b[k]:=m[j];
j:=j+1;
end ;
for k:=p to q do
m[k]:=b[k];
End;
Procedure Sort(p,q : integer); {p,q — индексы начала и конца сортируемой части массива}
Begin
if p<q then {массив из одного элемента тривиально упорядочен}
begin
Sort(p,(p+q) div 2);
Sort((p+q) div 2 + 1,q);
Sliv(p,q);
end;
End;
procedure TForm7.Button4Click(Sender: TObject);
begin
memo2.Clear;
time1:=GetTickCount;
Sort(1,N);
time2:=GetTickCount;
s:=time2-time1;
Edit1.Text:=IntToStr(s);
if n<40 then
for I := 1 to n do
memo2.Lines.Add(IntToStr(M[i]));
end;
end.