Массивы представляют собой фундаментальную структуру данных в программировании, позволяющую хранить упорядоченные наборы элементов одного типа. Они широко используются для эффективной организации и обработки данных, что делает их неотъемлемой частью многих алгоритмов и программ. В контексте подготовки к ЕГЭ по информатике понимание массивов и умение работать с ними являются ключевыми навыками для успешного решения соответствующих заданий.
Что такое массив?
Массив — это структура данных, состоящая из набора элементов, каждый из которых идентифицируется с помощью одного или нескольких индексов. Элементы массива хранятся в последовательных ячейках памяти, что обеспечивает быстрый доступ к ним по индексу. В большинстве языков программирования (более подробно о языках программирования можно прочитать тут) индексация начинается с нуля, то есть первый элемент массива имеет индекс 0.
Основные характеристики массивов
Однородность: все элементы массива имеют одинаковый тип данных.
Фиксированный размер: в статических массивах размер определяется при создании и не может изменяться в процессе выполнения программы.
Быстрый доступ: обращение к элементу массива осуществляется за постоянное время O(1) благодаря прямой адресации по индексу.
Массивы классифицируются по нескольким признакам, включая количество измерений, способ управления памятью и типы хранимых данных.
По количеству измерений
Одномерные массивы: представляют собой линейную последовательность элементов. Доступ к элементам осуществляется по одному индексу. Например, массив целых чисел в языке C:
int numbers[5] = {10, 20, 30, 40, 50};
printf("%d", numbers[2]); // Выведет 30
Двумерные массивы: организованы в виде матрицы, состоящей из строк и столбцов. Доступ к элементам осуществляется по двум индексам. Пример на языке C:
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
printf("%d", matrix[1][2]); // Выведет 6
Многомерные массивы: включают три и более измерений, позволяя представлять более сложные структуры данных. Например, трехмерный массив может использоваться для хранения данных о цветовых каналах изображения.
По способу управления памятью
Статические массивы: размер определяется во время компиляции и остается неизменным в процессе выполнения программы. Они обеспечивают быструю работу, но менее гибки в управлении памятью.
Динамические массивы: размер может изменяться во время выполнения программы. Для их создания и управления используются функции выделения и освобождения памяти, такие как malloc и free в языке C. Динамические массивы более гибки, но требуют тщательного управления памятью для предотвращения утечек.
По типу хранимых данных
Однородные массивы: все элементы имеют одинаковый тип данных. Это наиболее распространенный вид массивов, поддерживаемый большинством языков программирования.
Гетерогенные массивы: позволяют хранить элементы разных типов данных. Такие массивы встречаются реже и обычно реализуются в языках с динамической типизацией, таких как Python.
Массивы поддерживают различные операции, которые часто используются при решении задач на ЕГЭ по информатике:
Инициализация: присвоение начальных значений элементам массива.
Обращение по индексу: доступ к элементу массива для чтения или записи значения.
Перебор элементов: последовательный доступ к каждому элементу массива, часто реализуемый с помощью циклов.
Поиск: нахождение элемента с определенным значением. Может быть реализован линейным или бинарным поиском в зависимости от упорядоченности массива.
Сортировка: упорядочивание элементов массива по возрастанию или убыванию. Существует множество алгоритмов сортировки, таких как пузырьковая сортировка, быстрая сортировка и сортировка слиянием.
Вставка и удаление: добавление нового элемента или удаление существующего. В статических массивах эти операции могут потребовать сдвига элементов и перераспределения памяти.
Массивы в различных языках программирования
Синтаксис и возможности работы с массивами могут различаться в зависимости от языка программирования. Рассмотрим несколько примеров:
В языке C массивы объявляются с указанием типа элементов и размера:
int numbers[5]; // Объявление массива из 5 целых чисел
numbers[0] = 10; // Присвоение значения первому элементу
printf("%d", numbers[0]); // Вывод значения первого элемента
Важно помнить, что массивы в C не проверяют выход за границы, что может привести к ошибкам времени выполнения.
В языке Python нет традиционных массивов как в C или Java, но списки (list) выполняют аналогичную функцию. Списки могут содержать элементы разных типов и изменять свой размер во время выполнения программы.
numbers = [10, 20, 30, 40, 50]
print(numbers[2]) # Выводит 30
numbers.append(60) # Добавляет элемент в конец списка
Python предлагает большое количество встроенных методов для работы со списками, включая сортировку, добавление, удаление и поиск элементов.

Большой массив — это массив, содержащий значительное количество элементов. В контексте ЕГЭ и олимпиад по программированию это может быть структура, содержащая десятки или сотни тысяч элементов.
Работа с большими массивами требует особого внимания к эффективности алгоритма, поскольку при неправильной реализации программа может выйти за лимиты времени или памяти.
Особенности обработки больших массивов
Время выполнения
При работе с большими объёмами данных важно выбирать алгоритмы с наилучшей возможной асимптотикой. Например, сортировку выбором (O(n²)) следует избегать при больших массивах, предпочтение стоит отдать быстрой сортировке или сортировке слиянием (O(n log n)).
Использование памяти
Большие массивы могут занимать значительный объём оперативной памяти. При решении задач стоит учитывать ограничения платформы (например, для Python — около 256 МБ в заданиях ЕГЭ).
Чтение данных
В заданиях ЕГЭ данные для массивов часто считываются из файла или с клавиатуры. Для обработки больших массивов необходимо использовать эффективные методы считывания, например, через sys.stdin в Python:
Обработка потока данных
Иногда нет необходимости хранить весь массив в памяти. Вместо этого можно обрабатывать данные "на лету" — по одному элементу за раз. Это особенно актуально при решении задач с ограничениями по памяти.
Теоретические вопросы:
1. Что произойдёт при выполнении следующего кода на Python?
a = [2, 4, 6, 8]
print(a[2])
A) Будет выведено значение 4
B) Будет выведено значение 6
C) Возникнет ошибка выхода за границы массива
D) Будет выведено значение 8
2. Какой из перечисленных типов данных в Python чаще всего используется для хранения массива чисел?
A) dict
B) tuple
C) list
D) set
3. Сколько элементов будет содержать массив, созданный следующим образом на Pascal:
var a: array[1..100] of integer;
A) 99
B) 100
C) 101
D) 0
4. Какова сложность алгоритма линейного поиска в массиве из n элементов в худшем случае?
A) O(1)
B) O(log n)
C) O(n)
D) O(n²)