Обратный перебор массива
Обратный перебор массива — это просмотр его элементов от последнего к первому. Такой порядок особенно удобен, когда во время прохода нужно удалять элементы или выполнять перестановку соседних значений.
Порядок индексов
Если массив содержит \(n\) элементов и индексация начинается с нуля, индексы при обратном переборе имеют вид \(n-1, n-2, \ldots, 1, 0\). В языке Python это часто записывают циклом for i in range(n - 1, -1, -1). Такой цикл входит в общий перебор массива, но отличается направлением движения по индексам.
Пусть дан массив a = [4, 7, 2, 7, 5], и нужно удалить все элементы, равные 7. При движении справа налево удаляются элементы с индексами 3 и 1. После удаления элемента с индексом 3 элементы левее не сдвигаются, поэтому индекс 1 по-прежнему можно безопасно проверить. В результате получится [4, 2, 5].
a = [4, 7, 2, 7, 5]\ni = len(a) - 1 while i >= 0: if a[i] == 7: a.pop(i) i -= 1 print(a)
При удалении слева направо элементы справа сдвигаются на одну позицию влево. Из-за этого можно пропустить элемент, оказавшийся на уже проверенном индексе. Обратный перебор предотвращает такую ошибку. Если требуется только прочитать элементы, направление обычно несущественно.
Обратное направление полезно и при обмене элементов массива, например при продвижении наибольшего элемента к началу. Однако сам по себе обратный перебор не означает сортировку по убыванию: сортировка требует определённого результата для всего массива.
В каком порядке будут обработаны индексы массива из 6 элементов при обратном переборе?
Главное
- Обратный перебор идёт по индексам \(n-1, n-2, \ldots, 0\).
- Он удобен при удалении элементов, потому что сдвиг значений справа не затрагивает уже проверенные элементы.
- Обратный перебор — это способ движения по массиву, а не отдельный вид сортировки.