Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Одномерные массивы.doc
Скачиваний:
5
Добавлен:
15.11.2018
Размер:
1.24 Mб
Скачать

Обмен значений элементов

Пример 3.12. В массиве поменять местами два соседних элемента с номерами k1 и k2.

Номера элементов, которые меняются местами, должны быть известны.

Дано: n – размер массива; A[n] – массив вещественных чисел; k1, k2 – номера элементов, подлежащих обмену.

Найти новый массив А размера n.

Фрагмент алгоритма решения задачи выглядит так:

x = A[k1]; A[k1] = A[k2]; А[k2] = x.

Здесь х – вспомогательная переменная, в которой сохраняется первоначальное значение элемента массива A[k1].

Тест

k1=2; k2 = 6

Данные

Результат

N=9

A=(3, 1, 10, 1, 6, 5, 12, 36, –15)

A = (3, 5, 10, 1, 6, 1, 12, 36, –15)

Усложним задачу.

Пример 3.13. Дан одномерный массив A, состоящий из 2n элементов. Поменять местами его половины.

Дано:  n – размер массива; A[n] – массив вещественных чисел.

Найти новый массив А размера 2  n.

Словесное описание алгоритма.

Пусть массив А состоит из 10 элементов, тогда n = 5. Из массива А(1, 12, 23, 3, 7, 13, 27, 6, 9, 11) нужно получить массив А(13, 27, 6, 9, 11, 1, 12, 23, 3, 7). Мы должны поменять местами элементы с номерами 1 и 6, 2 и 7, 3 и 8, 4 и 9, 5 и 10, иными словами 1 и n + 1, 2 и n +2, 3 и n + 3, 4 и n + 4, 5 и n + 5. Можно заметить, что элемент с номером i меняется местами с элементом с номером n + i. Поэтому, используя фрагмент алгоритма, приведенный в примере 3.12, можно применить такой цикл:

нц

Для i от 1 до n повторять

x = A[i]

A[i] = A[n + i]

A[n + i] = x

кц

Задачи для самостоятельного решения

1. Дан одномерный массив. Поменяйте местами:

а) первый и максимальный элементы массива;

б) второй и минимальный элементы массива;

в) первый и последний отрицательный элементы массива.

2. Дан одномерный массив А, состоящий из 2n элементов. Поменяйте местами его половины следующим образом: первый элемент поменять местами с последним, второй – с предпоследним и так далее.

3. Дан одномерный массив В, состоящий из 2n элементов. Переставьте его элементы по следующему правилу:

а) b[n + 1], b[n + 2], …, b[2n], b[1], b[2], …, b[n];

б) b[n + 1], b[n + 2], …, b[2n], b[n], b[n – 1],…, b[1];

в) b[1], b[n + 1], b[2], b[n + 2], …, b[n], b[2n];

4. Дан одномерный массив. Переставьте в обратном порядке элементы массива, расположенные между минимальным и максимальным элементами.

3.7. Удаление и вставка элементов массива

Пример 3.14. Удалить из массива, в котором все элементы различны, наибольший элемент. После удаления массив уплотнить, сдвинув все следующие за ним элементы, влево.

Дано: n – размер массива; A[n] – массив вещественных чисел.

Найти новый массив А размера n – 1.

Для решения задачи необходимо:

1) найти номер k наибольшего элемента массива. Эта задача решена в примере 3.5.

2) сдвинуть все элементы массива, начиная с k–го на один элемент влево.

Для того чтобы разработать алгоритм, рассмотрим конкретный пример. Пусть дан одномерный массив, состоящий из 10 элементов: А(6, 3, 7, 11, 2, 8, 1, 5). Номер наибольшего элемента равен 7 (k = 7), то есть, начиная с седьмого элемента, будем сдвигать элементы на один влево: седьмому элементу присвоим значение восьмого, восьмому элементу присвоим значение девятого, а девятому присвоим значение десятого элемента. На этом сдвиг заканчивается. Таким образом, сдвиг начинается с k–го элемента и заканчивается элементом с номером n – 1, где n –количество элементов в массиве. После этого количество элементов в массиве станет на один элемент меньше. Массив примет вид: А(6, 3, 4, 7, 11, 8, 1, 5).

Фрагмент алгоритма решения задачи:

Нахождение максимального элемента и его номера

max = а[1]

k = 1

нц

Для i от 2 до n повторять

Если а[i] > max то

max = а[i]

k = i

Все если

кц

Сдвиг элементов массива

нц

Для i от = k до n – 1 повторять

а[i] = а[i+1]

кц

Уменьшение количества элементов массива

n = n – 1

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

Тест

Данные

Результат

N = 8

A = (6, 3, 7, 11, 2, 8, 1,  5)

A = (6, 3, 7, 2, 8, 1, 5) N = 7

В массиве номер наибольшего элемента k = 4. Удаляем этот элемент.

i

Массив

4; 4 ≤ 7? Да

А = (6, 3, 7, 2, 2, 8, 1, 5)

5; 5 ≤ 7? Да

А = (6, 3, 7, 2, 8, 8, 1, 5)

6; 6 ≤ 7? Да

А = (6, 3, 7, 2, 8, 1, 1, 5)

7; 7 ≤ 7? Да

А = (6, 3, 7, 2, 8, 1, 5, 5)

8; 8 ≤ 7? Нет

Конец цикла. n = 8 – 1 = 7

Пример 3.15. Решить предыдущую задачу, считая, что максимальных элементов может быть несколько.

Дано n – размер массива; A[n] – массив вещественных чисел.

Найти: Новый массив А размера n – k, где k – количество удаленных элементов массива.

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

нц

Для i от iкон до iнач шаг –1 повторять

<тело цикла>

кц

Значение переменной i уменьшается на единицу, начиная от iкон до iнач.

Кроме того, номер максимального элемента запоминать не будем, а просмотрим массив с конца, и если текущий элемент имеет максимальное значение, то удалим его, при этом значение счетчика удаленных элементов k будем увеличивать на 1. Для решения этой задачи фрагмент алгоритма для нахождения максимального элемента выглядит так:

Amax = a[1];

нц

Для i от 2 до n повторять {Нахождение максимального элемента}

Если a[i] > Amax то Amax = a[i];

Все если

кц

Просматриваем элементы, удаляем элемент, равный максимальному значению, подсчитываем количество удаленных элементов.

нц

Для i от n до 1 шаг –1 повторять

Если a[i] = Amax то

a[i] = a[i + 1]

k = k + 1

Все если

кц

n = n – k

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