- •Псевдокод
- •Один из примеров псевдокода - школьный алгоритмический язык.
- •Блок-схема
- •Запись на псевдокоде
- •Вопросы для самоконтроля
- •Сортировка с помощью прямого включения
- •Формулы бэкуса-наура
- •Перминов о.Н. Программирование на языке Паскаль
- •Синтаксические диаграммы
- •Алгоритмы сортировки
- •Сортировка с помощью прямого выбора (линейная)
- •Сортировка с помощью прямого обмена (пузырьковая)
- •Быстрая сортировка (ч. Хоара, сортировка с помощью разделения)
- •Рекурсия
- •Параметры-процедуры и параметры-функции
- •Символьные типы
- •Строковые типы
- •Строковые типы в Borland Pascal
- •Строковые типы в Delphi
- •Множества
- •Тип "запись" (record)
- •Вариантная часть записи
- •Процедуры и функции для работы с файлами
- •Работа с текстовыми файлами*
- •Работа с типизированными и нетипизированными файлами
- •Типизированные файлы
- •Последовательный и прямой доступ к файлам
- •Нетипизированные (бестиповые) файлы
- •Класс tfilestream (факультатив, для зачета 1 семестра не требуется)
- •Работа с данными файла
- •Закрытие файла
Сортировка с помощью прямого выбора (линейная)
В массиве, содержащем n элементов, выбирается наименьший элемент.
Этот элемент меняется местами с первым элементом a1.
Процесс повторяется с оставшимися n-1, n-2 и т.д. элементами, пока не останется один элемент.
СОРТИРОВКА МАССИВА ПО ВОЗРАСТАНИЮ
Procedure StraigthSelection; Var I, j, k:Integer; x:Integer; begin for i:=1 to n-1 do begin k:=i; x:=a[i]; for j:=i+1 to n do if a[j]<x then begin k:=j; x:=a[k]; end; a[k]:=a[i]; a[i]:=x; end; end; |
|
См. также 681.3 В52 Вирт Н. Алгоритмы и структуры данных. Сортировка с помощью дерева (пирамидальная сортировка, HeapSort).
Сортировка с помощью прямого обмена (пузырьковая)
Алгоритм основан на сравнении и, при необходимости, обмене значений в паре соседних элементов и продолжении этого процесса до тех пор, пока не будут упорядочены все элементы.
При проходах по массиву наибольший (наименьший) элемент смещается к правому краю массива. После этого область возможного перемещения уменьшается на 1 и аналогичным образом рассматриваются оставшиеся n-1, n-2, …, 2 элементов.
СОРТИРОВКА МАССИВА ПО ВОЗРАСТАНИЮ
PROCEDURE BubbleSort; VAR i, j:Integer; x:Integer; BEGIN for i:=N Downto 2 do for j:=1 to i-1 do if a[j] > a[j+1] then begin x := a[j]; a[j]:=a[j+1]; a[j+1]:=x end END {BubbleSort}; |
|
Быстрая сортировка (ч. Хоара, сортировка с помощью разделения)
Алгоритм быстрой сортировки (Quicksort) считается одним из лучших методов сортировки массивов.
ОПИСАНИЕ РЕКУРСИВНОГО АЛГОРИТМА:
выбирается произвольный элемент (х);
просматривается левая от х часть массива, пока не обнаружим элемент ai>х;
просматривается правая от х часть массива, пока не обнаружим элемент aj<х;
меняются местами ai и aj;
повторяются шаги 2-4, пока оба просмотра не встретятся в середине массива (i<j).
В результате массив окажется разбитым на левую часть, с ключами меньше (или равными) х, и правую - с ключами больше (или равными) х. Применим описанный выше процесс к получившимся двум (левой и правой) частям массива, затем - к частям этих частей, и так до тех пор, пока каждая из частей не будет состоять из одного элемента.
-
PROCEDURE Quicksort;
PROCEDURE sort(L,R:index);
VAR
i,j: integer;
w,x: integer;
BEGIN
i:= L;
j:= R;
x:=a[(L+R) div 2];
REPEAT
WHILE a[i]<x DO i:=i+1;
WHILE x<a[j] 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 sort(L,j);
IF i<R THEN sort(i,R)
END {sort};
BEGIN
sort(1,n)
END; {Quicksort}
ТЕМА. ПРОЦЕДУРЫ И ФУНКЦИИ
