Слияние отсортированных массивов в отсортированный на Pascal

Слияние отсортированных массивов в отсортированный...

Способ 1.

const 
  aN = 10;      // Количество элементов в массиве a 
  bN = 6;       // Количество элементов в массиве b 
  cN = aN + bN; // Количество элементов в массиве c 
 
var 
  a: array [1..aN] of integer := (1,5,12,15,47,89,98,112,171,180);
  b: array [1..bN] of integer := (13,44,58,71,73,111);
  c: array [1..сN] of integer;
  ai,bi,ci: integer;
begin
  writeln('Элементы массива a: ');
  for var i:=1 to aN do
    write(a[i],' ');
  writeln;  
  writeln('Элементы массива b: ');
  for var i:=1 to bN do
    write(b[i],' ');
  writeln;  
 
  ci := 1;
  ai := 1;
  bi := 1;
 
  while (ai<=aN) and (bi<=bN) do
  begin
    if a[ai]<b[bi] then
    begin
      c[ci] := a[ai];
      ai += 1;
    end
    else 
    begin
      c[ci] := b[bi];
      bi += 1;
    end;
    ci += 1;
  end;
  while ai<=aN do
  begin
    c[ci] := a[ai];
    ai += 1;
    ci += 1;
  end;
  while bi<=bN do
  begin
    c[ci] := b[bi];
    bi += 1;
    ci += 1;
  end;
 
  writeln('Результат слияния: ');
  for var i:=1 to cN do
    write(c[i],' ');
end.


Способ 2. С барьерным элементом

const 
  aN = 10;      // Количество элементов в массиве a 
  bN = 6;       // Количество элементов в массиве b 
  cN = aN + bN; // Количество элементов в массиве c 
 
var 
  a: array [1..aN+1] of integer := (1,5,12,15,47,89,98,112,171,180,0); // последний элемент - барьерный
  b: array [1..bN+1] of integer := (13,44,58,71,73,111,0);
  c: array [1..cN] of integer;
  ai,bi,ci: integer;
begin
  writeln('Элементы массива a: ');
  for var i:=1 to aN do
    write(a[i],' ');
  writeln;  
  writeln('Элементы массива b: ');
  for var i:=1 to bN do
    write(b[i],' ');
  writeln;  
 
  a[aN+1] := integer.MaxValue; // барьерный элемент - самый большой
  b[bN+1] := integer.MaxValue;
 
  ci := 1;
  ai := 1;
  bi := 1;
 
  for ci:=1 to cN do
    if a[ai]<b[bi] then
    begin
      c[ci] := a[ai];
      ai += 1;
    end
    else 
    begin
      c[ci] := b[bi];
      bi += 1;
    end;
 
  writeln('Результат слияния: ');
  for var i:=1 to cN do
    write(c[i],' ');
end.



Просмотров: 2337
10.02.2015, 10:44 -

Категория: Статьи » Программирование » Pascal