"Информатика (в 2-х частях)", Горячев А.В., Герасимова В.Г., Макарина Л.А., Островский С.Л., Паволоцкий А.В., Семёнов А.А., Юдина А.Г., Чернышёва Т.Л.
Массив хранит упорядоченный набор однотипных значений, а индекс помогает обратиться к каждому из них. Поиск в массиве нужен, чтобы проверить наличие заданного значения, определить положение найденного элемента или посчитать его появления. Если значения не упорядочены, их обычно проверяют по очереди. Для первого совпадения просмотр можно закончить сразу, а для подсчёта всех вхождений придётся проверить каждый элемент и отдельно учесть случай, когда совпадений нет.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Массив — упорядоченная последовательность элементов одного типа, доступ к которым задаётся индексом. Например, массив целых чисел хранит несколько чисел, расположенных в определённом порядке. Такая структура позволяет хранить набор данных и обращаться к его частям по отдельности.
Элемент массива — значение, хранящееся в одной ячейке массива. Чтобы прочитать или изменить это значение, обращаются к ячейке по её индексу. Различение элементов помогает понять, что именно программа проверяет при поиске.
Индекс массива — номер элемента, по которому к нему обращаются. Нумерация может начинаться с нуля или с единицы в зависимости от среды программирования. Перед работой с массивом нужно выяснить это правило, чтобы обратиться к нужной ячейке и не выйти за границы.
Поиск в массиве — проверка элементов, чтобы найти заданное значение и определить его индекс либо установить, что такого значения нет. Условие проверки обычно состоит в сравнении элемента с искомым значением. Поиск нужен, когда программа должна найти данные в наборе, а не просто обработать их все одинаково.
Поиск начинают с уточнения задачи: важно решить, какое значение ищут и какой результат нужен. Иногда достаточно ответа «есть» или «нет», а иногда требуется индекс элемента либо количество его появлений. От этого зависит, когда можно остановить просмотр и что нужно сохранять во время работы алгоритма.
Если массив не упорядочен, нельзя заранее заключить, где находится нужное значение. Поэтому сравнивают искомое значение с первым элементом, затем со следующим и так далее. Последовательная проверка надёжна для любого расположения данных: ни один непроверенный элемент нельзя заранее исключить.
Когда нужно первое совпадение, после успешного сравнения сохраняют индекс элемента и завершают поиск. Продолжать просмотр нет смысла, потому что более поздние элементы уже не могут изменить ответ о первом совпадении. Если совпадений не оказалось, алгоритм дойдёт до последнего элемента, а программа должна сообщить об отсутствии результата.
При поиске всех совпадений ранняя остановка привела бы к неполному ответу. Поэтому алгоритм проверяет каждый элемент, а при каждом совпадении сохраняет его индекс или увеличивает счётчик. После завершения просмотра счётчик показывает общее число вхождений, в том числе ноль, если совпадений не было.
Порядок элементов может помочь сократить число проверок, если для массива применяют подходящий быстрый алгоритм. Однако такие способы требуют учитывать свойства данных и условия задачи. Последовательный просмотр проще: он подходит и упорядоченному, и неупорядоченному массиву, поэтому его удобно использовать для начала.
| Что требуется найти | Действия при просмотре элементов | Когда завершить поиск | Что получить в результате |
|---|---|---|---|
| Проверить, есть ли значение | Сравнивать элементы с искомым, пока не встретится совпадение | При первом совпадении или после последнего элемента | Ответ «есть» или «нет» |
| Найти индекс первого совпадения | Сравнивать элементы и сохранить индекс первого равного искомому | При первом совпадении или после последнего элемента | Индекс либо сообщение, что значение не найдено |
| Посчитать все совпадения | Проверять каждый элемент и увеличивать счётчик при совпадении | После проверки последнего элемента | Количество вхождений |
Сначала определите, какой результат требует задача: факт наличия, первое положение или количество появлений. Затем выберите строку таблицы и следуйте её правилу остановки. Особенно внимательно проверьте, не требует ли условие продолжить просмотр после первого совпадения.
Условие. В массиве [4, 9, 2, 7] нужно проверить, есть ли число 2. Поскольку нужен только факт наличия, достаточно найти первое совпадение. Для примера считаем, что индексация начинается с нуля.
Ответ: число 2 в массиве есть. Такой ход подходит для проверки наличия, потому что дальнейшие сравнения не изменят ответ «есть».
Условие. В массиве [6, 3, 8, 3, 5] требуется найти индекс первого элемента, равного 3. Примем нумерацию с нуля, как принято во многих языках программирования. Здесь недостаточно назвать само число: нужно определить его положение.
Ответ: индекс первого элемента со значением 3 равен 1. Позднее в массиве есть ещё одна тройка, но она не меняет положение первого совпадения.
Условие. В массиве [2, 5, 2, 7, 2, 9] нужно определить, сколько раз встречается число 2. Здесь требуется не первое положение, а общее количество. Поэтому нельзя останавливаться, когда найдена первая двойка.
Ответ: число 2 встречается 3 раза. Проверка всего массива гарантирует, что счётчик учитывает каждое вхождение.
Если остановиться после первого совпадения при поиске всех вхождений, результат окажется неполным. Так ошибаются, перенося правило остановки из задачи на поиск первого элемента. Сверьте алгоритм с условием: для подсчёта или поиска всех индексов цикл должен дойти до конца массива.
Индекс и значение элемента — не одно и то же: индекс показывает место, а значение хранится в этом месте. Путаница возникает, когда числа в массиве принимают за номера ячеек. Проверьте результат на небольшом массиве: например, в [6, 3, 8] значение 3 находится на индексе 1 при нумерации с нуля.
Если значение не найдено, нельзя использовать индекс, который должен был сохраниться при совпадении. Такая ошибка появляется, когда программа не предусматривает отдельный случай отсутствия значения. До обращения по найденному индексу проверьте, что совпадение действительно было, или выведите сообщение «не найдено».
Неверные границы цикла могут пропустить первый или последний элемент либо привести к обращению за пределы массива. Обычно это происходит, если перепутать количество элементов с последним индексом или не учесть начало нумерации. Проверьте, что цикл посещает все допустимые индексы ровно в нужных пределах и не обращается к следующему, несуществующему элементу.
Для поиска нужно уметь обращаться к элементам массива по индексу и сравнивать их значения. Поэтому сначала полезно разобраться, как устроен массив, где начинается нумерация и какие индексы допустимы. Эти знания позволяют составить цикл, который проверит нужные ячейки без пропусков и выхода за границы.
Поиск применяют при обработке списков: например, чтобы проверить наличие записи или найти подходящее значение. Он также связан с сортировкой и алгоритмами работы с коллекциями, потому что порядок данных влияет на выбор способа обработки. Умение точно сформулировать результат поиска помогает строить более сложные программы.
Почему неупорядоченный массив обычно просматривают поэлементно?
В неупорядоченном массиве положение нужного значения заранее неизвестно: оно может стоять в любой ячейке. Поэтому элементы сравнивают с искомым по очереди, пока не найдут нужное или не закончат просмотр.
Что возвращать, если искомого значения в массиве нет?
Нужно сообщить, что совпадений нет, или вернуть заранее выбранный специальный результат. Например, программа может использовать отдельный признак «не найдено». Нельзя обращаться по индексу, который так и не был найден.
Когда поиск можно остановить после первого совпадения?
Когда требуется только проверить наличие значения или найти индекс его первого вхождения. Если нужно определить все индексы или число появлений, просмотр продолжают до конца массива.
Как найти не первое, а все вхождения значения?
Нужно сравнить с искомым значением каждый элемент массива. При каждом совпадении записывают индекс или увеличивают счётчик, а поиск заканчивают только после проверки последнего элемента.
Почему индекс элемента не совпадает с самим значением?
Индекс — это номер места, где хранится значение, а значение — содержимое ячейки. Например, в массиве [6, 3, 8] число 3 стоит на индексе 1 при нумерации с нуля. В другой среде нумерация может начинаться с 1.
§ 2. Поиск в массиве