- •Контрольная работа № 2 Массивы
- •Типовые алгоритмы обработки массивов
- •1. Инвертирование массива
- •Циклический сдвиг элементов массива вправо (влево) на м позиций
- •3. Поиск минимального (максимального) элемента
- •4. Сортировка массива
- •Формирование нового массива из элементов исходного массива
- •Поиск элемента в массиве
- •Образцы решения задач:
- •Анализ постановки задачи
- •Текст программы
- •Требования:
- •Варианты контрольной работы:
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],' ');
Формирование нового массива из элементов исходного массива
Для формирования нового массива из элементов исходного необходимо, прежде всего, подготовить переменную целого типа, которая будет, является индексом элементов для нового массива, и увеличивать значение номера элемента после того, как очередной элемент помещен в новый массив. Рассмотрим два алгоритма: формирование нового массива из элементов исходного массива, удовлетворяющих заданному условию (< 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]);
Поиск элемента в массиве
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(' Совпадений с образцом нет');
