Guest User

Simple Merge

a guest
Jul 22nd, 2015
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.44 KB | None | 0 0
  1. Procedure SortBin (var Mass: Tabl; n: integer; var tmp1, tmp2: integer);
  2.   Var i, j, left, right, middle: integer;
  3.       tmp: DMY;
  4. Begin
  5.   For i:= 2 to n do
  6.       If Compare(Mass[i-1], Mass[i], tmp2) then
  7.           Begin
  8.             tmp:= Mass[i];
  9.             left:= 1;
  10.             right:= i - 1;
  11.             Repeat
  12.               middle:= (left + right) div 2;
  13.               If Compare(tmp, Mass[middle], tmp2) then left:= middle + 1
  14.                                                   else right:= middle - 1;
  15.             Until left > right;
  16.             For j:= i - 1 downto left do Mass[j+1]:= Mass[j];
  17.             Mass[left]:= tmp;
  18.             tmp1:= tmp1 + 1
  19.           End
  20. End;
  21.  
  22. Procedure Merge(First, Second: Link; m, k: integer; var tmp1, tmp2: integer);
  23. Var tmp: Link;
  24. Begin
  25.     While (m = 0) and (k = 0) do
  26.       Begin
  27.         If Compare(first^.dat, second^.dat, tmp2) and (k <> 0) then
  28.             Begin
  29.               tmp:= First;
  30.               First:= Second;
  31.               Second:= Second^.next;
  32.               First^.next:= tmp;
  33.               k:= k - 1;
  34.             End
  35.         Else
  36.             If m <> 0 then
  37.               Begin
  38.                 tmp:= First^.next;
  39.                 First^.next:= Second;
  40.                 Second:= Second^.next;
  41.                 First^.next:= tmp;
  42.                 m:= m - 1;
  43.               End;
  44.         tmp1:= tmp1 + 1;            {Счётчик перестановок}
  45.       End;
  46. End;
Advertisement
Add Comment
Please, Sign In to add comment