единиц Num1). Затем,


единиц Num1). Затем, при повторном проходе в том же линейном порядке, в соответствующее количество ячеек записываются нули, после чего - оставшиеся единицы. Ясно, что трудоемкость алгоритма при оценке O(N) составит в точности 2N. Однако, вместо двойного просмотра удается обойтись лишь одним проходом по массиву, то есть N шагами. Идея состоит в том, чтобы обрабатывать массив с двух сторон, двигаясь навстречу. Для этого инициализируются сразу две индексных переменных - IndexLeft и IndexRight, причем первая переменная увеличивается, начиная со значения 0, а вторая - уменьшается от N-1. Начав просмотр вектора слева и пропуская все элементы, стоящие "на месте", то есть нули, добираемся до 1. Как только обнаруживается это "нарушение", переключаемся на обработку справа налево. Теперь, при попадании на "плохой" элемент справа, то есть на нуль, следует обменять содержимое компонент Mas[IndexLeft] и Mas[IndexRight], после чего, разумеется, оба индекса вновь "растут"
Индекс
Элементарные функции    Линейные уравнения    Нелинейные уравнения    Случайные числа


Hosted by uCoz