Моделирование алгоритма работы сортировки элементов и метода поиска образца в упорядоченной информации

Автор: Пользователь скрыл имя, 11 Ноября 2011 в 01:28, курсовая работа

Описание работы

ЗАДАНИЕ: Упорядочить массив чисел в диапазоне от 1 до 100000 по убыванию и возрастанию методом сортировки посредством вставок и слияния.

ЦЕЛЬ РАБОТЫ: разработать блок-схему алгоритма метода сортировки посредством вставок и слияния, создать схему программы, составить и протестировать программу на языке высокого уровня Delphi, получить результаты сортировки времени и скорости в зависимости от количества вводимых символов, построить графики зависимости в промежутках: [1 … 300], [300 … 5 000], [5 000 ... 10 000

Содержание

1.Содержание

1.Содержание курсового проекта……………………………….2

2.Введение………………………………………………………..5

3.Теоретическая часть……………………………………………6

3.1.Сортировка посредством вставок и слияния…………..6

3.2. Алгоритм поиска.Бинарные атрибуты…………………9

4.Практическая часть……………………………………………12

4.1. Блок схема алгоритма сортировки массива чисел посредством

вставок и слияния простых вставок………………………………12

4.2. Схема программы сортировки массива чисел посредством встевок

и слияния……………………………………………………………14

4.3. Блок схема алгоритма поиска через бинарные атрибуты

заданного образца в упорядоченном массиве……………16

4.4. Схема программы поиска через бинарные атрибуты

заданного образца в упорядоченном массиве……………18

4.5. Описание алгоритма задания элементов массива……….20

4.6. Текст программы, выполняющей сортировку массива

символов способом простых вставок …………………………..21

4.7. Описание интерфейса программы……………………………33

4.8. Таблицы результатов времени и скорости от количества

символов;…………………………………………………..34

4.9. Графики зависимостей времени и скорости от количества

чисел…………………………………..……………………36

5.Заключение………………………………………………………39

6.Список используемой литературы……………………………..40

Работа содержит 1 файл

Курсовик.doc

— 705.50 Кб (Скачать)

type

  TForm2 = class(TForm)

    Label1: TLabel;

    Panel1: TPanel;

    Label2: TLabel;

    Label3: TLabel;

    Edit1: TEdit;

    Button1: TButton;

    StringGrid1: TStringGrid;

    Button2: TButton;

    StringGrid2: TStringGrid;

    Button3: TButton;

    StringGrid3: TStringGrid;

    GroupBox1: TGroupBox;

    Label5: TLabel;

    GroupBox2: TGroupBox;

    Label8: TLabel;

    Label10: TLabel;

    Edit2: TEdit;

    Button4: TButton;

    Memo1: TMemo;

    Label4: TLabel;

    Memo2: TMemo;

    Label6: TLabel;

    Label7: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end; 

type

    mas = array of integer;

    mas2 = array of array of integer;

var

  Form2: TForm2; 

  a:array of integer;   //начальный массив

  bin_mas : array of array of integer;

  bin_mas1 : array of array of integer;

    sr,mass,n,i,j,k,buf,obr:integer;

      priz:boolean; 

implementation 

{$R *.dfm} 

function IntToBin(n : integer) : mas; // ФУНКЦИЯ ПЕРЕВОДА В ДВОИЧНЫЙ КОД

var

    i, x, y : integer;

begin

    SetLength(result, 16);

    x := n;

    y := x;

    i := 15;

    while (abs(y) >0) do

    begin

        x := y mod 2; // остаток от деления на 2

        y := y div 2;

        result[i] := x; // переписываем в массив двоичные числа с конца

        i := i-1;

    end;

    while i >=0 do  // заполняем нулями оставшиеся  элементы массива

    begin

        result[i] := 0;

        i := i - 1;

    end;

end; 

procedure TForm2.Button1Click(Sender: TObject);

var

    i : integer;

begin

n:=Strtoint(Edit1.Text);

if (n<1) or (n>10000) then

begin

    ShowMessage('Ошибка ввода');

      n:=0;

end

else begin

  StringGrid1.ColCount:=n;

  StringGrid2.ColCount:=n;

  StringGrid3.ColCount:=n;

end;

SetLength(a,n);

  for i:=0 to n-1 do begin

    StringGrid1.Cells[i,0]:=IntToStr(random(10000));

    a[i]:=StrToInt(StringGrid1.Cells[i,0]);

    Randomize; 
 

      StringGrid2.Cells[i,0]:='';

      StringGrid3.Cells[i,0]:='';

  end; 

    Label5.Caption:='';

    {Button3Click(Button3);

    Button2Click(Button2);}

end; 

procedure TForm2.Button2Click(Sender: TObject);

var len,len1,len2,p1,p2,p3:integer;

  time1, time2, i, j : integer;

  d:array of integer;  // отсортированный массив

  b:array of integer;  // первая половина массива

  c:array of integer;  // вторая половина массива

  mas_bin1 : mas;         // двоичный код одного элемента  массива

begin

Label5.Caption:=FloatToStr(time); 

time1 := GetTickCount;     // время начала сортировки

// Сортировка  по возрастанию,определение времени  сортировки 

len:=Length(a);

len1:=len div 2;

len2:=len-len1;

SetLength(b,len1);

SetLength(c,len2);

SetLength(d, length(a));

for i:=0 to len1-1 do

  b[i]:=a[i];

j:=0;

for i:=len1 to len-1 do

begin

  c[j]:=a[i];

  j:=j+1;

end; 

for i:= 0 to len1-1 do   //сортировка вставками массива b и с

 begin

  buf:= b[i];

      j:= i-1;

while (j>=0)and(b[j]>buf) do

  begin

      b[j+1]:= b[j];

    j:= j-1;

    end;

    b[j+1]:= buf;

end; 

for i:= 0 to len2-1 do

begin

  buf:= c[i];

      j:= i-1;

while (j>=0)and(c[j]>buf) do

  begin c[j+1]:= c[j];

     j:= j-1;

          end;

  c[j+1]:= buf;

  end;

//********* слияние  ********// 

p1 := 0;   // для  массива b

p2 := 0;   // для  массива c

 p3 := 0;

while (p1 < len1) and (p2 < len2) do

begin

    if b[p1] < c[p2] then

    begin

        d[p3] := b[p1];

        inc(p3);

        inc(p1);

    end

    else begin

        d[p3] := c[p2];

        inc(p3);

        inc(p2);

    end;

end;

while p1 < len1 do

begin

    d[p3] := b[p1];

    inc(p3);

    inc(p1);

end; 

 while p2 < len2 do

begin

    d[p3] := c[p2];

    inc(p3);

    inc(p2);

end; 

time2 := GetTickCount;  // время окончания сортировки

{инициализируем  массив с двоичными кодами}

SetLength(bin_mas, length(d));

for i := 0 to length(d) -1 do

    SetLength(bin_mas[i],16);

SetLength(mas_bin1,16); 

for i := 0 to len-1 do                // вывод отсортированного массива

begin

    StringGrid2.Cells[i,0]:=inttostr(d[i]);

    mas_bin1 := IntToBin(d[i]);

    for j := 0 to 15 do      // переписываем отсортированный массив в двоичном виде

        bin_mas[i,j] := mas_bin1[j];   // в mas_bin1 содержится двоичный код каждого элемента отсортированного массива

end;

Label5.Caption := IntToStr(time2-time1) + 'ms';

end; 

procedure TForm2.Button3Click(Sender: TObject);

var  len,len1,len2,p1,p2,p3:integer;

  time1, time2, i, j : integer;

  d:array of integer;

  b:array of integer;

  c:array of integer;

  mas_bin1 : mas;         // двоичный код одного элемента массива

begin

time1 := GetTickCount;     // время начала сортировки

// Сортировка  по убыванию,определение времени  сортировки 

len:=Length(a);

len1:=len div 2;

len2:=len-len1;

SetLength(b,len1);

SetLength(c,len2);

SetLength(d, length(a));

for i:=0 to len1-1 do

  b[i]:=a[i];

j:=0;

for i:=len1 to len-1 do

begin

  c[j]:=a[i];

  j:=j+1;

end; 

for i:= 0 to len1-1 do  // сортировка вставками массива b и с

begin

  buf:= b[i];

      j:= i-1;

while (j>=0)and(b[j]<buf) do

  begin

      b[j+1]:= b[j];

    j:= j-1;

    end;

    b[j+1]:= buf;

end; 

for i:= 0 to len2-1 do

begin

  buf:= c[i];

      j:= i-1;

while (j>=0)and(c[j]<buf) do

  begin c[j+1]:= c[j];

     j:= j-1;

          end;

  c[j+1]:= buf;

  end;

//********* слияние  ********// 

p1 := 0;   // для  массива b

p2 := 0;   // для  массива c

 p3 := 0;

while (p1 < len1) and (p2 < len2) do

begin

    if b[p1] > c[p2] then

    begin

        d[p3] := b[p1];

        inc(p3);

        inc(p1);

    end

    else begin

        d[p3] := c[p2];

        inc(p3);

        inc(p2);

    end;

end;

while p1 < len1 do

begin

    d[p3] := b[p1];

    inc(p3);

    inc(p1);

end; 

while p2 < len2 do

begin

    d[p3] := c[p2];

    inc(p3);

    inc(p2);

 end; 

time2 := GetTickCount;  // время окончания сортировки

SetLength(bin_mas1, length(d));

for i := 0 to length(d) -1 do

    SetLength(bin_mas1[i],16);

SetLength(mas_bin1,16); 

for i := 0 to len-1 do                // вывод отсортированного массива

begin

    StringGrid3.Cells[i,0]:=inttostr(d[i]);

    mas_bin1 := IntToBin(d[i]);

    for j := 0 to 15 do      // переписываем отсортированный массив в двоичном виде

        bin_mas1[i,j] := mas_bin1[j];   // в mas_bin1 содержится  двоичный код каждого элемента отсортированного массива

end; 

Label5.Caption := IntToStr(time2-time1)+ 'ms';

end; 

procedure TForm2.Button4Click(Sender: TObject);

var

    bin_num : mas;

    i, j,time1,time2: integer;

    flag, flag1 : boolean;

    s : string;

begin

//Поиск элемента

    time1 := GetTickCount;

    obr:=StrToInt(Edit2.Text);

    Label10.Caption := '';

    Label4.Caption := '';

    bin_num := IntToBin(obr); // двоичный код искомого числа

    s := '';

    Memo1.Lines.Clear;

    Memo2.Lines.Clear;

    //**************Поиск для массива по возрастанию***************************//

  {поразрядное  сравнение двоичных кодов элемента  массива и заданного элемента}

Информация о работе Моделирование алгоритма работы сортировки элементов и метода поиска образца в упорядоченной информации