Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
К.р.№2.doc
Скачиваний:
6
Добавлен:
13.11.2019
Размер:
130.56 Кб
Скачать

4. Сортировка массива

Df: Под сортировкой будем понимать процесс перестановки объектов заданного массива в определенном порядке. Цель сортировки - облегчить последующий поиск элементов в отсортированном массиве. Рассмотрим методы сортировки, относящиеся к простым. Эти методы в зависимости от приема, лежащего в их основе, можно разбить на три типа: сортировка включением (вставлениями), сортировка выбором, сортировка обменом (метод пузырька).

Сортировка выбором. Этот метод основан на поиске элемента. Выбирается элемент с наименьшим ключом и меняется местами с первым элементом. Затем выбирается элемент с наименьшим ключом среди оставшихся n-1 элементов и меняется местами со вторым и т.д. Алгоритм сортировки основан на типовом алгоритме поиска минимума (максимума).

Реализация:

{Сортировка массива по возрастанию методом прямого выбора}

for i:=1 to n-1 do

begin

{ Поиск минимального элемента в части массива от a[i] до a[n]}

n_min:=i;

for j:=i+1 to n do

if a[j]<a[n_min] then n_min:=j;

{ Поменяем местами a[n_min] и a[i] }

temp:=a[i];

a[i]:=a[n_min];

a[n_min]:=temp

end;

{Выведем отсортированный массив}

for i:=1 to n do write(a[i],' ');

  1. Формирование нового массива из элементов исходного массива

Для формирования нового массива из элементов исходного необходимо, прежде всего, подготовить переменную целого типа, которая будет, является индексом элементов для нового массива, и увеличивать значение номера элемента после того, как очередной элемент помещен в новый массив. Рассмотрим два алгоритма: формирование нового массива из элементов исходного массива, удовлетворяющих заданному условию (< key); слияние двух упорядоченных массивов в один упорядоченный.

Реализация:

{Формирование нового массива по ключу}

Writeln(‘ Введите ключ’);

Readln( key);

j:=0; {индекс нового массива}

For i:=1 to n do

If a[i] < key then

begin

j:=j+1;

b[j]:=a[i]

end;

{Печать сформированного массива}

For i:=1 to j do Writeln(‘b[‘, i, ‘]= ’, b[i]);

  1. Поиск элемента в массиве

Df: Процесс нахождения элемента в последовательности по значению одного или более чем одного поля называется поиском в последовательности. Рассмотрим два типа поиска: линейный и бинарный. Линейный поиск заключается в последовательном просмотре всех элементов массива до тех пор пока либо будет найден искомый элемент, либо пока не закончатся элементы массива. Для реализации алгоритма заведем переменную логического типа flag, с помощью которой можно будет выйти из цикла в случае нахождения искомого элемента. Бинарный поиск применим только в отсортированных массивах. Алгоритм бинарного поиска состоит в следующем: исследуется серединный элемент готовой последовательности, если элемент найден, то поиск закончен, если искомый элемент больше серединного, то в дальнейшем поиск будет осуществляться в левой части последовательности (в случае упорядоченного по убыванию массива), в противном случае - в правой части последовательности. На следующем шаге исследуется серединный элемент соответствующей подпоследовательности и т.д.

Реализация:

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

write(' Введите образец для поиска');

readln(key);

{Поиск простым перебором}

flag:=FALSE; {совпадений нет}

i:=1;

repeat

if a[i] = key then flaf:=TRUE {совпадение с образцом}

else i:=i+1; {переход к следующему элементу}

until (i>n) or flag; {завершаем, если произошло совпадение с образцом или проверены все элементы массива}

if flag then writeln(' Совпадение с элементом номер которого =', i)

else writeln(' Совпадений с образцом нет');

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