Advertisement
Guest User

Merge Sort

a guest
Jan 16th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.45 KB | None | 0 0
  1. const
  2.   MX = 2000;
  3. type
  4.   arr = array [1..MX] of longint;
  5. var
  6.   ar, tmp: arr;
  7.   n, k1, k2, i, pc, sc, res: longint;
  8.  
  9. procedure merge(var a: arr; l, m, r: int64); //процедура слияния
  10. var
  11.   i, j, k: int64;
  12. begin
  13.   i := l;
  14.   j := m + 1;
  15.   k := 1;
  16.   while (i <= m) or (j <= r) do begin //проход по 2 маленьким массивам
  17.     if (i > m) or ((j <= r) and (a[i] > a[j])) then begin //сравнение элеекнтов
  18.       tmp[k] := a[j]; //добавление в массив побольше из 2го маленького массива
  19.       inc(j);
  20.     end else begin
  21.       tmp[k] := a[i]; //из 1го
  22.       inc(i);
  23.     end;
  24.     inc(k);
  25.   end;
  26.   for i := l to r do
  27.     a[i] := tmp[i - l + 1]; //разрушение временного массива
  28. end;
  29.  
  30. procedure merge_sort(var a: arr; l, r: int64); //процедура деления
  31. var
  32.   m: int64;
  33. begin
  34.   if l < r then begin
  35.     m := (l + r) div 2;
  36.     merge_sort(a, l, m);
  37.     merge_sort(a, m + 1, r);
  38.     merge(a, l, m, r); //слить маленькие массивы
  39.   end;
  40. end;
  41.  
  42. begin
  43.   read(n);
  44.   for i := 1 to n do begin
  45.     read(ar[i]);
  46.   end;
  47.   merge_sort(ar, 1, n); //отсортировать, параметры: имя массива, индекс самого левого элемента, индекс самого правого элемента
  48.   for i := 1 to n do begin
  49.     write(ar[i], ' ');
  50.   end;
  51. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement