Лічильник
Сьогодні Разом
Відвідувань 323 5266023
Авторізацій 49 421854
Користувачів 40 2716
Статья

29. Удаление всех нулевых элементов массива


Собственно говоря и эту задачу можно свести к предыдущей. Сформулируем алгоритм так: Начиная с первого элемента будем просматривать массив, и как только текущий элемент равен нулю - удалим его, после чего продолжим просмотр элементов дальше.
k := 1;
while k <= n do
  if a[k] = 0
    then begin
           // Удалить k-й элемент массива
         end
    else k := k + 1
В этом алгоритме важно учесть, что переход к следующему элементу массива (k := k + 1) необходим только в случае, если текущий элемент не нулевой и его удалять не нужно.

Не сложно обратить внимание, что алгоритм удаления всех нулевых элементов массива можно несколько улучшить, если просматривать массив будем не в прямом, а обратном порядке. Это объясняется тем, что мы не будем перемещать элементы, которые в последствии будут удалены.
k := n;
while k >= 1 do begin
  if a[k] = 0
   then begin
          // Удалить k-й элемент массива
        end;
  k := k - 1
end;
В этом алгоритме переход к предыдущему элементу массива осуществляем не зависимо от того, удаляем ли мы его или нет.

Для больших массивов с большим числом удаляемых элементов второй алгоритм дает значительный выигрыш по времени выполнения.