Алгоритмическое мышление при решении задач (на примере языка C#). Шамшев А.Б - 17 стр.

UptoLike

Составители: 

17
Удаление изменяет индексацию элементов, которые находятся после
удаляемого элемента. Однако если мы идем с конца, то эти элементы уже
просмотрены, поэтому изменение индексации не будет влиять на корректность
работы алгоритма.
Поэтому алгоритм будет выглядеть следующим образом:
for (int i = data.Length - 1; i >= 0; i--) {
if (data[i] == delValue) {
delByIndex(ref data, i);
}
}
Очевидно, что данный алгоритм будет выполняться быстрее первой
версии.
Плюсом такого подхода к реализации удаления по значению является то,
что в высокоуровневых языках операция удаления элемента по индексу, как
правило, уже есть, поэтому реализовать данное действие не сложно.
Однако минусом является то, что при каждом удалении создается копия
почти всего массива
. Т. е. если у нас K удалений, то K раз будет создана копия
N элементов (хотя если быть более точным, то в начале будет создана копия
N-1 элементов, потом N-2 элементов и т. д.).