Program Algorithm; { Two-way merge. Described on page 160 of "The Art of Computer Programming" volume 3 / "Sorting and Searching" by Donald E. Knuth. } const sentinel = $FFFF; LIM2 = 16; LIM1 = 19; LIM3 = 35; const rij1 : array[1..LIM1] of word = ( 1, 2, 3, 4, 5, 6,25,27,29,30,31,32,35,37,43,45,52,53,55); rij2 : array[1..LIM2] of word = ( 1, 3, 6, 9,11,14,15,17,19,28,29,32,35,37,40,50); var k : word; rij3 : array[1..LIM3] of word; {************************************} procedure TwoMerge; var k1, k2, L : word; begin k1 := 1; k2 := 1; for L := 1 to LIM3 do begin if rij1[k1] <= rij2[k2] then begin rij3[L] := rij1[k1]; rij1[k1] := sentinel; if k1 < LIM1 then k1 := k1+1; end else begin rij3[L] := rij2[k2]; rij2[k2] := sentinel; if k2 < LIM2 then k2 := k2+1; end; end; end; {************************************} begin for k := 1 to LIM1 do Write(rij1[k],' '); Writeln; for k := 1 to LIM2 do Write(rij2[k],' '); Writeln; TwoMerge; for k := 1 to LIM3 do Write(rij3[k],' '); Writeln; end.