Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Презентации 2часть / Лекция_22_Улучшенная сортировка.ppt
Скачиваний:
28
Добавлен:
11.05.2015
Размер:
135.17 Кб
Скачать

procedure TForm1.Button1Click(Sender: TObject);

Var n0,i:word;

// a:mas;

Ob: Tob;

begin

n0:=strtoint(Edit3.text);

Ob:=Tob.Create(n0);

for i:=1 to ob.n do begin

ob.a[i].k:=strtoint(StringGrid1.Cells[i,0]);

ob.a[i].zp:=StringGrid1.Cells[i,1];

end;

ob.SortSlip;

for i:=1 to ob.n do begin

StringGrid2.Cells[i,0]:=inttostr(ob.a[i].k);

StringGrid2.Cells[i,1]:=ob.a[i].zp;

end;

ob.Free;

end;

07/02/19

32

Обработка события «Изменение окна Edit3»

procedure TForm1.Edit3Change(Sender: TObject);

begin

StringGrid1.Cells[0,0]:='key';

StringGrid1.Cells[0,1]:='fio';

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

StringGrid2.Cells[0,1]:='fio';

StringGrid1.ColCount :=strtoint(Edit3.text)+1;

StringGrid2.ColCount :=strtoint(Edit3.text)+1;

end;

end.

07/02/19

33

Пример оформления экзаменационной задачи

07/02/19

34

Задачи на экзамен

Ввести массив записей {a[i].f, a[i].k} (f -

фамилия; к - учетный номер) из TstringGrid1, отсортировать по ключу к и выдать в TStringGrid2.

Алгоритм сортировки по методу разделения Хоара в виде рекурсивной процедуры оформить в отдельный модуль Unit2 как метод класса.

07/02/19

35

unit Unit2;

interface

Type

Tinf=string[4];

Tkey=word;

Tzp=record

zp:Tinf;

k:Tkey;

end;

mas=array[1..1] of Tzp;

Tmas=^mas;

Класс

сортировки

разделением

Tob=class

a:Tmas;

n:word;

constructor create(n0:word);

Procedure QuickSort;

destructor Free;

end;07/02/19

36

implementation

constructor Tob.create(n0:word);

begin

inherited create;

n:=n0;

getmem(a,n0*sizeof(Tzp));

end;

destructor Tob.Free;

begin

Freemem(a,n*sizeof(Tzp));

end;

07/02/19

37

Procedure Tob.QuickSort;

Procedure rdiv(L,R: word);

Var i,j:Word; w:Tzp; x:Tkey;

begin

i:=L; j:=R;

 

x:=a[(L+R) div

2].k;

Repeat

 

While a[i].k<x do

i:=i+1;

While a[j].k>x do

j:=j-1;

if i<=j then begin

 

w:=a[i];a[i]:=a[j];a[j]:=w;i:=i+1;j:=j-1;

 

 

end;

until

i>j;

if

L<j

then rdiv(L,j);

if

i<R

then rdiv(i,R);

end; //rdiv

begin

rdiv(1,n);

end;

end.

07/02/19

38

 

unit Unit1;

implementation

uses unit2;

procedure TForm1.Button1Click(Sender: TObject);

Var n0,i:word; Ob: Tob;

begin

n0:=strtoint(Edit3.text);

Ob:=Tob.Create(n0);

StringGrid1.Cells[0,0]:='key';

StringGrid1.Cells[0,1]:='fio';

for i:=1 to ob.n do begin

ob.a[i].k:=strtoint(StringGrid1.Cells[i,0]);

ob.a[i].zp:=StringGrid1.Cells[i,1];

end;

ob.QuickSort;

for i:=1 to ob.n do begin

StringGrid2.Cells[i,0]:=inttostr(ob.a[i].k);

StringGrid2.Cells[i,1]:=ob.a[i].zp;

 

end;

ob.Free;

 

end; 07/02/19

39

Обработка события «Изменение окна Edit3»

procedure TForm1.Edit3Change(Sender: TObject);

begin

StringGrid1.Cells[0,0]:='key';

StringGrid1.Cells[0,1]:='fio';

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

StringGrid2.Cells[0,1]:='fio';

StringGrid1.ColCount :=strtoint(Edit3.text)+1;

StringGrid2.ColCount :=strtoint(Edit3.text)+1;

end;

end.

07/02/19

40

Пример оформления экзаменационной задачи

07/02/19

41