Pers.narod.ru. Алгоритмы. Удаление повторяющихся значений из массива |
Такая задача нередко возникает при анализе данных. Хорошо программистам на PHP, у которых
есть стандартная функция array_unique для этой цели, а вот на компилируемых языках приходится изобретать. Первое, что приходит в голову - ввести дополнительный массив,
в который перепишем элементы исходного массива, встречающиеся только один раз. Теоретически мы
должны найти последние вхождения каждого элемента и посчитать их как единственные.
const n=10;
a: array [1..n] of integer=(1,2,3,1,0,-2,2,5,4,0);
var b: array [1..n] of integer;
i,j,k,l:integer;
begin
l:=0;
for i:=1 to n do begin
k:=1;
for j:=i+1 to n do if a[i]=a[j] then inc(k);
if k=1 then begin inc(l); b[l]:=a[i]; end;
end;
writeln ('Уникальные элементы');
for i:=1 to l do write (b[i]:3);
reset (input); readln;
end.
Можно обойтись и без использования дополнительного массива, но тогда понадобится ещё один цикл для "сжатия" массива с целью удаления лишних повторений.
const size=10;
a: array [1..size] of integer=(1,2,3,1,0,-2,2,5,4,0);
var i,j,k,n:integer;
begin
n:=size;
i:=1;
while i<=n do begin
j:=i+1;
while j<=n do begin
if a[i]=a[j] then begin
for k:=j to n-1 do a[k]:=a[k+1];
dec(n);
end
else inc(j);
end;
inc(i);
end;
writeln ('Уникальные элементы');
for i:=1 to n do write (a[i]:3);
reset (input); readln;
end.
Для нашего теста в обоих случаях получаем 1 2 3 0 -2 5 4, но второй алгоритм сохранит первоначальный порядок элементов в массиве.
|
|