aydarbiktimirov

heapsort

Jan 20th, 2012
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.01 KB | None | 0 0
  1. procedure swap(var a: integer; var b: integer);
  2. var
  3.     tmp: integer;
  4. begin
  5.     tmp:=a;
  6.     a:=b;
  7.     b:=tmp;
  8. end;
  9.  
  10. procedure shift_down(var a: array of integer; i: integer; len: integer);
  11. var
  12.     l: integer;
  13. begin
  14.     l:=i;
  15.     if (2 * i + 1 < len) and (a[l] < a[2 * i + 1]) then
  16.         l:=2 * i + 1;
  17.     if (2 * i + 2 < len) and (a[l] < a[2 * i + 2]) then
  18.         l:=2 * i + 2;
  19.     swap(a[i], a[l]);
  20.     if l <> i then
  21.         shift_down(a, l, len);
  22. end;
  23.  
  24. procedure shift_up(var a: array of integer; i: integer);
  25. begin
  26.     while (a[(i - 1) div 2] < a[i]) do
  27.     begin
  28.         swap(a[i], a[(i - 1) div 2]);
  29.         i:=(i - 1) div 2;
  30.     end;
  31. end;
  32.  
  33. procedure heap_sort(var a: array of integer);
  34. var
  35.     i: integer;
  36. begin
  37.     for i:=0 to length(a) - 1 do
  38.         shift_up(a, i);
  39.     for i:=length(a) - 1 downto 1 do
  40.     begin
  41.         swap(a[0], a[i]);
  42.         shift_down(a, 0, i);
  43.     end;
  44. end;
  45.  
  46. var
  47.     a: array of integer;
  48.     n, i: integer;
  49.  
  50. begin
  51.     read(n);
  52.     setlength(a, n);
  53.     for i:=0 to n - 1 do
  54.         read(a[i]);
  55.     heap_sort(a);
  56.     for i:=0 to n - 1 do
  57.         write(a[i], ' ');
  58.     writeln();
  59. end.
Advertisement
Add Comment
Please, Sign In to add comment