Главная страница

Тема 2. Основная цель этой курсовой работы сравнение и анализ алгоритмов сортировки списка прямым выбором. 4


Скачать 0.84 Mb.
НазваниеОсновная цель этой курсовой работы сравнение и анализ алгоритмов сортировки списка прямым выбором. 4
Дата28.04.2022
Размер0.84 Mb.
Формат файлаdoc
Имя файлаТема 2.doc
ТипРеферат
#502797
страница8 из 8
1   2   3   4   5   6   7   8

Приложение А


КОД ПРОГРАММЫ

(обязательное)
unit Unit1;
interface
uses

Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.StdCtrls, Vcl.ComCtrls,

VclTee.TeeGDIPlus, VCLTee.TeEngine, Vcl.ExtCtrls, VCLTee.TeeProcs,

VCLTee.Chart, VCLTee.Series;
type

TForm1 = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

TabSheet3: TTabSheet;

Label1: TLabel;

Edit1: TEdit;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

RadioButton3: TRadioButton;

Button1: TButton;

Button2: TButton;

Button3: TButton;

StringGrid1: TStringGrid;

Chart1: TChart;

Label2: TLabel;

Label3: TLabel;

Series1: TLineSeries;

Series2: TLineSeries;

Label4: TLabel;

Label5: TLabel;

procedure Button3Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

const n=1000000;

var

Form1: TForm1;

M: array[0..n] of longint;

M2: array [0..n] of longint;
implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

i,j,razm,max,min,buf: longint;

t,t1,t2,t3,t4,q: integer;

time1: array [0..10] of integer;//Время классической сортировки массива в зависимости от его размерности

time2: array [0..10] of integer;//Время сортировки массива с одновременным поиском min и max в зависимости от его размерности

size: array [0..10] of longint; //Массив с размерностями массивов

begin

//Проверки на заполненность данных

//проверка на выбранность степени упорядоченности

if (RadioButton1.Checked=false) and (RadioButton2.Checked=false) and (RadioButton3.Checked=false) then

Showmessage ('Необходимо выбрать степень упорядоченности!');
//Проверка на пустоту размерности массива, если пользователь

//Не ввел размерность массива, то выводится соответствующее окно

if length(edit1.text)=0 then Showmessage('Необходимо указать размерность массива!')

else razm:=strtoint(Edit1.Text); //Присваиваем переменной размерность массива
//Определяем, какой массив выбран, создаем его и дублируем эти значения во второй массив

if (RadioButton1.Checked=true) then //Неупорядоченный массив

begin

randomize;

for i:=0 to razm do

begin

M[i]:=random(1000000);

M2[i]:=M[i];

end;

end

else if (RadioButton2.Checked=true) then //Упорядоченный массив

begin

M[0]:=random(3);

for i:=1 to razm do begin

M[i]:=M[i-1]+random(5)+1;

M2[i]:=M[i];

end;

end

else if (RadioButton3.Checked=true) then //Упорядоченный в обратном порядке массив

begin

M[0]:=999999;

for i:=1 to n do begin

M[i]:=M[i-1]-random(10)-1;

M2[i]:=M[i];

end;

end;
//В зависимости от того, какая выбрана упорядоченность, для удобства записываем это в таблицу

if (RadioButton1.Checked=true) then

StringGrid1.Cells[0, 4] := 'Неупорядоченный'

else if (RadioButton2.Checked=true) then

StringGrid1.Cells[0, 4] := 'Упорядоченный'

else if (RadioButton3.Checked=true) then

StringGrid1.Cells[0, 4] := 'Упорядоченный в обратном порядке';

//Сортировка классическим прямым выбором
q:=0;

while q<>10 do begin //Цикл необходимый для отметки времен и размерностей массивов

size[q]:=razm; //Присваиваем массиву с размерностями определенные значения

t1:=GetTickCount;

for i:=0 to razm do begin //Цикл с выполнением классической сортировки

min:=i; //Присваивается индекс первой неотсортированной переменной

for j := i+1 to razm do begin //Среди оставшихся неотсортированных элементов массива находится минимальный

if M[min]>M[j] then

min:=j;

end;

buf:=M[i]; //Через дополнительную переменную меняем элементы местами

M[i]:=M[min];

M[min]:=buf;

end;

t2:=GetTickCount;

time1[q]:=t2-t1; //Заносим полученное время сортировки в массив с временными показателями

q:=q+1;

//Уменьшаем размерность массива

if razm div 100000>=3 then razm:=razm-100000

else if razm div 100000>=1 then razm:=razm-30000

else if razm div 10000>=1 then razm:=razm-7000

else if razm div 1000>=1 then razm:=razm-200;

//Возвращаем массиву первоначальный вид, но уже с уменьшенной размерностью

for i:=0 to razm do

M[i]:=M2[i];

end;

razm:=strtoint(Edit1.Text); //Присваиваем максимальную размерность массива

//Возвращаем массиву первоначальный вид с максимальной размерностью

for i:=0 to razm do

M[i]:=M2[i];
//Сортировка прямым выбором с одновременным поиском минимума и максимума

q:=0;

while q<>10 do begin //Цикл необходимый для отметки времен и размерностей массивов

t3:=GetTickCount;

for i:=0 to razm do begin //Цикл с выполнением сортировки с одновременным поиском минимума и максимума

min:=i; //Присваивается индекс первой неотсортированной переменной

max:=razm-i; //Присваивается индекс последней неотсортированной переменной

for j := i+1 to razm-i-1 do begin //Среди оставшихся неотсортированных элементов

if M2[min]>M2[j] then //массива находится минимальный и максимальный соответственно

min:=j;

if M2[max]
max:=j;

end;

buf:=M2[i]; //Через дополнительную переменную меняем элементы местами

M2[i]:=M2[min];

M2[min]:=buf; //Меняем местами первый неупорядоченный элемент с минимальным

buf:=M2[razm-i];

M2[razm-i]:=M2[max]; //Меняем местами последний неупорядоченный элемент с максимальным

M2[max]:=buf;

end;

t4:=GetTickCount;

time2[q]:=t4-t3; //Заносим полученное время сортировки в массив с временными показателями

q:=q+1;

//Уменьшаем размерность массива

if razm div 100000>=3 then razm:=razm-100000

else if razm div 100000>=1 then razm:=razm-30000

else if razm div 10000>=1 then razm:=razm-7000

else if razm div 1000>=1 then razm:=razm-200;

//Возвращаем массиву первоначальный вид, но уже с уменьшенной размерностью

for i:=0 to razm do begin

M2[i]:=M[i];

end;
end;
// Занесение в таблицу временные показатели сортировок прямым выбором и соответствующие размерности

for q := 0 to 9 do

begin

StringGrid1.Cells[1+q, 0] :=inttostr(size[q]); //Заполняем строчку в таблице с размерностями

StringGrid1.Cells[1+q, 1] :=inttostr(time1[q]); //Время выполнения классической сортировки

StringGrid1.Cells[1+q, 2] :=inttostr(time2[q]); //Время выполнения сортировки с одновременныс поиском min и max

end;
end;
procedure TForm1.Button2Click(Sender: TObject); //Создание и выведение графика

var

i,n:integer;

begin

series1.Clear;

series2.Clear;

n:=10;

for i := 1 to n do

begin

//Функция классической сортировка

series1.AddXY(StrToInt(stringgrid1.Cells[i, 0]), StrToInt(stringgrid1.Cells[i, 1]));

//Функция сортировки с поиском минимумом и максимумом

series2.AddXY(StrToInt(stringgrid1.Cells[i, 0]), StrToInt(stringgrid1.Cells[i, 2]));

end;

end;
procedure TForm1.Button3Click(Sender: TObject); //Кнопка закрытия программы

begin

close;

end;
procedure TForm1.FormCreate(Sender: TObject); //Подписываем все названия строчек в таблице

begin

StringGrid1.ColWidths[0] := 350;

StringGrid1.RowHeights[0] := 40;

StringGrid1.RowHeights[1] := 40;

StringGrid1.RowHeights[2] := 40;

StringGrid1.Cells[0, 0] := 'Размерность массива';

StringGrid1.Cells[0, 3] := 'Степень упорядоченности массива:';

StringGrid1.Cells[0, 1] := 'Классическая сортировка прямым выбором';

StringGrid1.Cells[0, 2] := 'Сортировка с одновременным поиском min и max';

end;
end.
1   2   3   4   5   6   7   8


написать администратору сайта