Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
uchebnaya_praktika.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
107.01 Кб
Скачать
      1. Сортировка прямым выбором

Этот метод сортировки основан на следующих принципах:

а)  Выбирается элемент с наименьшим ключом.

б)  Он меняется местами с первым элементом.

в)  Затем этот процесс повторяется с оставшимися n-1 элементами, n-2 элементами и т.д. до тех пор, пока не останется один, элемент с самым большим ключом.

      1. Сортировка прямым обменом (метод пузырька)

Этот алгоритм основывается на сравнении и смене мест для пары соседних элементов и продолжении этого процесса до тех пор, пока не будут упорядочены все элементы. На каждом шаге сортировки элементы, начиная с последнего, продвигаются к левому концу и занимают места соответствующие своим значениям.

Методы поиска. Краткие теоретические сведения

Задача поиска - найти элемент с указанным значением ключа поиска

Линейный поиск

Массив не отсортирован.

Алгоритм:

Последовательно просматривать элементы массива, пока не встретится элемент с искомым ключевым полем или не будет достигнута верхняя граница массива (в этом случае искомого элемента нет).

Метод барьера

var a: array[1..n+1] of tApple;

i: integer;

x: integer;

i:=1; a[n+1].ves:=x;

while(a[i].ves <> x) do

i:= i+1;

if i<= n then

writeln('nomer',i)

else

writeln('no');

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

Другие названия метода: бинарный поиск, метод деления пополам.

Массив отсортирован.

1) выбирается a[m] с индексом m

в середине массива

2) проверяется x<a[m]. Если это так, отбросить эл-ты массива с индексами больше m

и перейти к п.1. (поиск в левой части массива)

3) Если x>a[m], отбросить эл-ты массива с индексами меньше m и перейти к п.1. (поиск в правой части массива)

L:=1; R:=n;

found := false;

while not found and (L<=R) do

begin

M:= (L+R) div 2;

if x<a[M].ves then

R:=M-1

else if x> a[M].ves then

L:=M+1

else {x=A[M].ves}

found:= true;

end;

if found then

writeln('Элемент ',M)

else

writeln('Такого нет');

  1. Задание № 2 Сортировка массива указателей на записи

    1. Постановка задачи

В рассмотренной в предыдущем задании задаче сортировки массива записей следует отметить две важных проблемы:

1) Поскольку размер массива должен быть зафиксирован в описании типа, задается заведомо большое количество элементов массива. Это приводит к нерациональному использованию памяти.

2) Обмен местами (пересылка) записей в массиве требует больших затрат машинного времени.

Чтобы устранить эти две проблемы (нерациональное использование памяти и большие затраты времени на копирование полей записей) применим следующий подход.

Необходимо решить задачу, поставленную в предыдущем разделе, разместив данные в динамической памяти. Стандартными средствами Pascal динамический массив создать нельзя*. Для решения задачи необходимо использовать массив указателей на элементы данных, то есть массив, каждым элементом которого является указатель на переменную типа запись. Графическое изображение примера такой структуры данных показано на рисунке 4.1 на странице 10.

Кроме того, необходимо решить задачу сортировки, меняя значения указателей (т.е. адреса), а не информационные части данных. Графическое изображение примера такой операции обмена показано на рисунке 4.2.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]