§ 14. Преобразование элементов массива
14.3. Обмен местами элементов в массиве
Для обмена местами двух элементов массива можно использовать дополнительную переменную, которую называют буфером. Буферу присваивают значение одного из элементов массива, этому элементу присваивают значение другого элемента массива, затем второму элементу присваивают значение буфера. buf := a[i]; a[i] := a[k]; a[k] := buf; Для обмена элементов можно использовать встроенную функцию swap: swap(a[i], a[k]). Пример 14.2. Задан одномерный массив целых чисел. Поменять местами максимальный и минимальный элементы массива. Предполагается, что каждый из них встречается в массиве только один раз. Этапы выполнения задания I. Исходные данные: одномерный массив а, количество элементов n. II. Результат: преобразованный массив a. III. Алгоритм решения задачи. 1. Ввод исходных данных. IV. Описание переменных: n, n_min, n_max – int, а – vector <int>. Пример 14.3. Задан одномерный массив целых чисел. Циклически сдвинуть все элементы массива влево на 1, первый на последнее место. Например, массив 1 2 3 4 5 будет преобразован в 2 3 4 5 1. Этапы выполнения задания I. Исходные данные: одномерный массив а, количество элементов n. II. Результат: преобразованный массив a. III. Алгоритм решения задачи.Описание переменных: n – int, а – vector <int>. 1. Ввод исходных данных. Решением задачи 14.3 может быть также следующий алгоритм (пример 14.4): 1. Сохраним значение первого элемента в буферной переменной. Если в массив добавить еще один элемент в конце, то его можно использовать в качестве буферной переменной. В этом случае в цикле нужно будет сделать на 1 сдвиг больше. Затем удалить последний элемент. Удалить последний элемент можно с помощью команды pop_back(). Фрагменты программ в примере 14.5 показывают, как можно циклически сдвинуть элементы массива на 1 вправо (последний на первое место). |
Осуществим обмен элементов следующим образом: a[i] = a[k]; a[k] = a[i]; Тогда мы потеряем значение элемента, стоящего изначально на месте a[i], и получим два элемента со значением, равным a[k]. Пример 14.2. V. Программа:
VI. Тестирование. Пример 14.3. V. Программа:
VI. Тестирование. Пример 14.4. V. Программа:
Пример 14.5. Циклический сдвиг вправо на 1. Фрагменты программ:
|