КАТЕГОРИИ: Архитектура-(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);
Дата добавления: 2014-01-07; Просмотров: 251; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |