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

Программа Метода прямого выбора

for i=1 to n-1 do

begin

m:=i; //поиск m

for j=i+1 to n do

if a[j].k<a[m].k then m:=j;

 

r:=a[i]; //перестановка

 

a[i]:=a[m];

 

a[m]:=r;

 

end;

 

 

07/02/19

31

Трассировка метода прямого выбора

8

6 2 5 1

i=1

1

6 2 5 8

i=2

1

2 6 5 8

i=3

1

2 5 6 8

i=4

1

2 5 6 8

i=5

1 2 5 6 8

07/02/19

32

Двоичный поиск с объектом

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);

Function PoiskD(x:Tkey): word;

destructor Free;

07/02/19

33

end;

 

Двоичный поиск с объектом1

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

34

 

Двоичный поиск с объектом2

Function Tob.PoiskD(x:Tk): word;

Function Del(L,R:word):word;

var m:word;

begin

if R<=L then Del:=R

else begin

m:=(L+R)div 2;

if a[m].k<x then Del:=Del(m+1,R)

else Del:=Del(L,m);

end;

end; // Del

var i:word;

begin

i:=Del(1,n);

if a[i].k=x then Result:=i

else Result:=0;

 

end; //Poisk

 

end. //unit1

35

 

07/02/19

Двоичный поиск с объектом3

unit Unit1;

Interface

. . .

implementation

uses unit2;

. . .

procedure TForm1.Edit3Change(Sender: TObject);

begin

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

end;

07/02/19

36

procedure TForm1.Button1Click(Sender: TObject);

Var n0,i,x,k:word;

Работа с объектом

Ob: Tob;

«Поиск двоичный»

Begin

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

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

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;

x:=strtoint(edit1.text);

k:=ob.PoiskD(x);

if k=0 then Edit2.Text:='not element'

else Edit2.Text:=ob.a[k].zp;

ob.Free;

end;

end; //unit1

07/02/19

37

Двоичный поиск с объектом1

07/02/19

38

Контрольные вопросы

Что такое ключ записи и основное требование к нему?

Опишите алгоритм линейного поиска с барьером. Какова его эффективность?

Опишите алгоритм двоичного поиска и дайте оценку его эффективности.

Изложите алгоритмическую идею трех основных методов прямой сортировки массива и охарактеризуйте их эффективность.

07/02/19

39

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

В упорядоченном по ключу массиве записей {a[i].f, a[i].k} (f – фамилия; к - учетный номер) найти и выдать в окошко TEdit информацию из ячейки, содержащей заданный ключ х.

Алгоритм двоичного поиска в виде

рекурсивной функции оформить в отдельном модуле Unit2 как метод класса.

Ввод исходного массива записей организовать из TStringGrid.

07/02/19

40