Advertisement
Guest User

Untitled

a guest
Aug 17th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.04 KB | None | 0 0
  1. {$APPTYPE CONSOLE}
  2. uses SysUtils;
  3.  
  4. const
  5.   maxn = 200000;
  6.  
  7. var n, i : integer;
  8.     a, b : array[1..maxn] of integer;
  9.  
  10. procedure merge(l, r, m : integer);
  11. var p1, p2, res, i : integer;
  12. begin
  13.   p1 := l; p2 := m + 1;
  14.   res := 0;
  15.   while (p1 <= m) and (p2 <= r) do begin
  16.     if (a[p1] <= a[p2]) then begin
  17.       b[res] := a[p1];
  18.       inc(p1); inc(res);
  19.     end else begin
  20.       b[res] := a[p2];
  21.       inc(p2); inc(res);
  22.     end;
  23.   end;
  24.   while (p1 <= m) do begin
  25.     b[res] := a[p1];
  26.     inc(res); inc(p1);
  27.   end;
  28.   while (p2 <= r) do begin
  29.     b[res] := a[p2];
  30.     inc(p2); inc(res);
  31.   end;
  32.   for i := l to r do begin
  33.     a[i] := b[i - l];
  34.   end;
  35. end;
  36.  
  37. procedure mergesort(l, r : integer);
  38. var m : integer;
  39. begin
  40.   if (l >= r) then exit;
  41.   m := (l + r) div 2;
  42.   mergesort(l, m);
  43.   mergesort(m + 1, r);
  44.   merge(l, r, m);
  45. end;
  46.  
  47. begin
  48.   reset(input, 'input.txt');
  49.   rewrite(output, 'output.txt');
  50.   read(n);
  51.   for i := 1 to n do
  52.     read(a[i]);
  53.   mergesort(1, n);
  54.   for i := 1 to n do
  55.     write(a[i], ' ');
  56. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement