- •Введение
- •Способы записи алгоритма
- •Типы алгоритмов
- •Линейные алгоритмы
- •Разветвляющийся алгоритм
- •5. Циклические алгоритмы
- •5.1. Организация циклов с предусловием и постусловием
- •5.2. Табуляция функции одной переменной
- •5.3. Применение циклов в алгоритмах обработки массивов
- •5.3.1. Ввод-вывод одномерных массивов
- •5.3.2.Алгоритм нахождения суммы элементов одномерного массива
- •5.3.3. Алгоритм нахождения минимального или максимального элемента массива и его порядкового номера
- •5.3.4. Алгоритм перестановки
- •5.3.4. Алгоритм формирования нового массива из элементов имеющегося
- •5.3.5. Поиск в упорядоченном массиве.
- •6. Алгоритмы обработки двумерных массивов
- •6.1. Ввод-вывод двумерных массивов
- •Литература
5.3.4. Алгоритм перестановки
Очень часто возникает задача перестановки найденного минимального x(n_min) или максимального x(n_max) элемента с другим элементом того же массива, номер которого задан x(n_sad).
Описание алгоритма перестановки будем иллюстрировать простым примером: имеются стакан с водой и стакан с молоком; нужно поменять содержимое стаканов (рис.5.7). Ясно, что для этого понадобиться третий, пустой стакан.
Для нашей задачи:
-
стакан с водой – это x(n_min);
-
стакан с молоком – это x(n_sad);
-
пустой стакан – дополнительная величина R.
Перелив (перестановку) можно осуществить в три этапа
Рис.5.7. Иллюстрация алгоритма перестановки
В принятых нами обозначениях это запишется следующим образом:
R=x(n_min)
x(n_min)=x(n_sad)
x(n_sad)=R
Замечание 1. В следующих случаях перестановка не нужна или невозможна:
а) n_min=n_sad – перестановка не нужна, т.к. элемент, с которым нужно осуществить перестановку и есть минимальный;
б) n_sad= n_min-1 (т.е. перестановка с предыдущим элементом), а n_min=1 - перестановка невозможна, т.к. нет предыдущего элемента;
в) n_sad=n_min+1 (т.е.перестановка см последующим элементом), а n_min=N – перестановка невозможна, т.к. нет последующего элемента.
Поэтому, прежде чем делать перестановку нужно проверить одно из перечисленных условий (какое – зависит от поставленной задачи), чтобы решить вопрос о ее необходимости или возможности.
Замечание 2. В рассмотренном нами алгоритме перестановки роль вспомогательной величины R (третьего стакана) может сыграть величина min.
Тогда перестановка осуществляется в два этапа
Пример 5.3. Найти минимальный элемент и поменять его местами с предыдущим элементом массива.
Решение. Схема алгоритма для решения этой задачи приведена на рис.5.8.
Рис. 5.8. Схема алгоритма примера 5.3
5.3.4. Алгоритм формирования нового массива из элементов имеющегося
Пусть имеется массив x, состоящий из N элементов. Необходимо сформировать новый массив y, в который войдут те элементы массива x, для которых выполняется некоторое условие, например, только положительные значения.
Решение. Обозначим через i величину, которая будет являться индексом у элементов массива x; она же будет показывать, сколько элементов в нем уже просмотрено. Обозначим через k величину, которая будет являться индексом у элементов массива Y; она же будет показывать, сколько элементов в нем уже сформировано. Тогда для решения задачи применим следующий алгоритм:
-
Зададим значение k=0.
-
Организуем цикл по i=1,2,…,N,
внутри которого будем осуществлять проверку условия попадания xi в новый массив.
В случае выполнения этого условия выполняем следующие действия: k=k+1
yk=xi
Пример 5.4. Даны два числовых массива. Сформировать третий массив из положительных элементов первого массива и отрицательных элементов обоих массивов.
Решение. Обозначим исходные массивы как A и B, состоящие из N и M элементов, соответственно. Вновь формируемый массив обозначим через C. При его формировании описанный выше алгоритм нужно применить дважды: сначала для массива A, а затем для массива B. Но во втором случае установку значения k=0 делать не нужно, т.к. числа из массива В будут дописываться в уже сформированную из элементов массива А часть массива С. Схема алгоритма приводится на рис.5.9.