Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Interface

Begin

Begin

Begin

Begin

Begin

Begin

Begin

Begin

Begin

Begin

Implementation

Interface

Алгоритмы поиска и сортировки

Finalization

Initialization

Except

Finally

Repeat

Try

Try

Begin

Var

Finally

Try

Begin

Var

TF: TextFile;

i: LongWord;

AssignFile(TF, FileName);

ReWrite(TF);

for i:=0 to List.Count-1 do

Writeln(TF, LongWord(List.Items[i]^));

CloseFile(TF);

end;

end;

 

{ Чтение содержимого выборки из текстового файла и инициализация массива }

function OpenList(FileName: string; var Size: LongWord): Boolean;

TF: TextFile;

pw: ^LongWord;

Size:=0;

Result:=True;

AssignFile(TF, FileName);

Reset(TF);

New(pw);

Readln(TF, pw^);

List.Add(pw);

until Eof(TF);

CloseFile(TF);

Size:=List.Count;

end;

Result:=False;

end;

end;

 

List:=TList.Create;

 

DisposeList;

 

end.

Модуль содержит реализации различных алгоритмов поиска по критерию отсортированных и неотсортированных объектов в списковом объекте класса TList. Все приведенные алгоритмы были рассмотрены в главе 4 и не требуют дополнительных пояснений.

 

unit srch;

 

 

uses Classes, Common;

 

{ Алгоритмы поиска }

function LineNonSortedSearch(aList: TList;

aItem: Pointer; aCompare: TCompareFunc): Integer;

function LineSortedSearch(aList: TList;

aItem: Pointer; aCompare: TCompareFunc): Integer;

function BinarySearch(aList: TList;

aItem: Pointer; aCompare: TCompareFunc): Integer;

function BinaryRecurSearch(aList: TList;

aItem: Pointer; L,R: Integer; aCompare: TCompareFunc): Integer;

 

 

 

{ Линейный поиск в неотсортированном массиве }

function LineNonSortedSearch;

var i: Integer;

Result:=-1;

for i:=0 to aList.Count-1 do

if aCompare(aList.List[i],aItem) = 0 then

Result:=i;

Break;

end;

end;

 

{ Линейный поиск в отсортированном массивом }

function LineSortedSearch;

var i, CompareResult: Integer;

Result:=-1;

{ Искать первый элемент, больший или равный искомому }

for i:=0 to aList.Count-1 do

CompareResult:=aCompare(aList.List[i], aItem);

if CompareResult >= 0 then

if CompareResult = 0 then

Result:=i else

Result:=-1;

Exit;

end;

end;

end;

 

{ Двоичный поиск }

function BinarySearch;

var L, R, M, CompareResult: Integer;

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

L:=0; R:=aList.Count-1;

while L <= R do

{ Индекс среднего элемента }

M:=(L + R) div 2;

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

CompareResult:=aCompare(aList.List[M], aItem);

{ Если значение среднего элемента меньше искомого -

переместить левый индекс на позицию до среднего индекса }

if CompareResult < 0 then

L:=M+1 else

{ Если значение среднего элемента больше искомого -

переместить правый индекс на позицию после среднего индекса }

if CompareResult > 0 then

R:=M-1 else

Result:=M;

Exit;

end;

end;

Result:=-1;

end;

 

{ Рекурсивный алгоритм двоичного поиска }

function BinaryRecurSearch;

var i, CompareResult: Integer;

{ Проверка ширины интервала }

if L > R then

Result:=-1 else

i:=(L + R) div 2;

CompareResult:=aCompare(aList.List[i], aItem);

{ Ключ найден, возврат индекса }

if CompareResult = 0 then

Result:=i else

if CompareResult = -1 then

{ Поиск в правом подинтервале }

Result:=BinaryRecurSearch(aList,aItem,i+1,R,aCompare) else

{ Поиск в левом подинтервале }

Result:=BinaryRecurSearch(aList,aItem,L,i-1,aCompare);

end;

end;

 

end.

 

Модуль содержит реализации различных алгоритмов сортировки элементов в списковом объекте класса TList. Все приведенные алгоритмы были рассмотрены в главе 4 и не требуют дополнительных пояснений.

 

unit sort;

 

 

uses Classes, Common;

 

{ Медленные алгоритмы сортировки }

procedure InsertionStdSort(aList, bList: TList; aCompare: TCompareFunc);

procedure InsertionBublSort(aList: TList;

aFirst, aLast: Integer; aCompare: TCompareFunc);

procedure InsertionOptSort(aList: TList;

aFirst, aLast: Integer; aCompare: TCompareFunc);

procedure SelectionStdSort(aList, bList: TList; aCompare: TCompareFunc);

procedure SelectionSort(aList: TList;

aFirst, aLast: Integer; aCompare: TCompareFunc);

procedure BubbleSort(aList: TList;

aFirst, aLast: Integer; aCompare: TCompareFunc);

procedure ShakerSort(aList: TList;

aFirst, aLast: Integer; aCompare: TCompareFunc);

{ Быстрые алгоритмы сортировки }

procedure ShellSort(aList: TList; aCompare: TCompareFunc);

procedure ShellKnuthSort(aList: TList;

aFirst, aLast: Integer; aCompare: TCompareFunc);

{ Самые быстрые алгоритмы сортировки }

procedure QuickHoarStd1Sort(aList: TList;

aFirst, aLast: Integer; aCompare: TCompareFunc);

procedure QuickHoarStd2Sort(aList: TList;

aFirst, aLast: Integer; aCompare: TCompareFunc);

procedure QuickHoarRNDSort(aList: TList;

aFirst, aLast: Integer; aCompare: TCompareFunc);

procedure QuickHoarMDNSort(aList: TList;

aFirst, aLast: Integer; aCompare: TCompareFunc);

procedure QuickHoarNonRecursiveSort(aList: TList;

aFirst, aLast: Integer; aCompare: TCompareFunc);

procedure MSS(aList: TList; aFirst, aLast: Integer;

aCompare: TCompareFunc; aTempList: PPointerList);

procedure DigitSort(aList: TList);

 

 

<== предыдущая лекция | следующая лекция ==>
Finally | End else
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 251; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.