Advertisement
Guest User

Untitled

a guest
Dec 16th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. {$mode delphi}
  2. {$r+}
  3.  
  4. type
  5. heap = record
  6. a: array of integer;
  7. n: integer;
  8. end;
  9.  
  10. procedure swap(var i, j: integer);
  11. var
  12. k: integer;
  13. begin
  14. k := i;
  15. i := j;
  16. j := k;
  17. end;
  18.  
  19. function parent(i: integer): integer;
  20. begin
  21. parent := (i - 1) div 2;
  22. end;
  23.  
  24. function leftChild(i: integer): integer;
  25. begin
  26. leftChild := 2 * i + 1;
  27. end;
  28.  
  29. function rightChild(i: integer): integer;
  30. begin
  31. rightChild := 2 * i + 2;
  32. end;
  33.  
  34. procedure init(var h: heap);
  35. begin
  36. setLength(h.a, 1);
  37. h.n := 0;
  38. end;
  39.  
  40. {procedure down(var h: heap; i: integer);
  41. var
  42. l, r, largest: integer;
  43. begin
  44. l := leftChild(i);
  45. r := rightChild(i);
  46. largest := i;
  47. if (l < h.n) and (h.a[l] > h.a[i]) then
  48. largest := l;
  49. if (r < h.n) and (h.a[r] > h.a[largest]) then
  50. largest := r;
  51. if largest <> i then
  52. begin
  53. swap(h.a[i], h.a[largest]);
  54. down(h, largest);
  55. end;
  56. end;}
  57.  
  58. procedure up(var h: heap; i: integer);
  59. var
  60. l, r, smallest: integer;
  61. begin
  62. l := leftChild(i);
  63. r := rightChild(i);
  64. smallest := i;
  65. if (l < h.n) and (h.a[l] < h.a[i]) then
  66. smallest:=l
  67. else smallest:=i;
  68. if (r < h.n) and (h.a[r] < h.a[smallest]) then
  69. smallest:=r;
  70. if smallest<>i then
  71. begin
  72. swap(h.a[i], h.a[smallest]);
  73. up(h, smallest);
  74. end;
  75. end;
  76.  
  77. {function removeLargest(var h: heap): integer;
  78. begin
  79. removeLargest := h.a[0];
  80. h.a[0] := h.a[h.n - 1];
  81. h.n := h.n - 1;
  82. down(h, 0);
  83. end;}
  84.  
  85. procedure insert(var h: heap; i: integer);
  86. var p:integer;
  87. begin
  88. p:=parent(i);
  89. h.n:=h.n+1;
  90. i:=h.n-1;
  91. while h.a[p]<i do
  92. begin
  93. h.a[i]:=h.a[p];
  94. i:=p;
  95. end;
  96. h.a[i]:=i;
  97. end;
  98.  
  99. procedure display(var h: heap; i: integer);
  100. begin
  101. for i:=1 to length(h.a) do
  102. writeln(h.a[i]);
  103. end;
  104.  
  105.  
  106. var
  107. n:integer;
  108. j:integer;
  109. h:heap;
  110. begin
  111. repeat
  112. readln(n);
  113. insert(h , n);
  114. until n=0;
  115.  
  116. for j:=1 to length(h.a) do
  117. display(h, j);
  118. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement