Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {$mode delphi}
- {$r+}
- type
- heap = record
- a: array of integer;
- n: integer;
- end;
- procedure swap(var i, j: integer);
- var
- k: integer;
- begin
- k := i;
- i := j;
- j := k;
- end;
- function parent(i: integer): integer;
- begin
- parent := (i - 1) div 2;
- end;
- function leftChild(i: integer): integer;
- begin
- leftChild := 2 * i + 1;
- end;
- function rightChild(i: integer): integer;
- begin
- rightChild := 2 * i + 2;
- end;
- procedure init(var h: heap);
- begin
- setLength(h.a, 1);
- h.n := 0;
- end;
- {procedure down(var h: heap; i: integer);
- var
- l, r, largest: integer;
- begin
- l := leftChild(i);
- r := rightChild(i);
- largest := i;
- if (l < h.n) and (h.a[l] > h.a[i]) then
- largest := l;
- if (r < h.n) and (h.a[r] > h.a[largest]) then
- largest := r;
- if largest <> i then
- begin
- swap(h.a[i], h.a[largest]);
- down(h, largest);
- end;
- end;}
- procedure up(var h: heap; i: integer);
- var
- l, r, smallest: integer;
- begin
- l := leftChild(i);
- r := rightChild(i);
- smallest := i;
- if (l < h.n) and (h.a[l] < h.a[i]) then
- smallest:=l
- else smallest:=i;
- if (r < h.n) and (h.a[r] < h.a[smallest]) then
- smallest:=r;
- if smallest<>i then
- begin
- swap(h.a[i], h.a[smallest]);
- up(h, smallest);
- end;
- end;
- {function removeLargest(var h: heap): integer;
- begin
- removeLargest := h.a[0];
- h.a[0] := h.a[h.n - 1];
- h.n := h.n - 1;
- down(h, 0);
- end;}
- procedure insert(var h: heap; i: integer);
- var p:integer;
- begin
- p:=parent(i);
- h.n:=h.n+1;
- i:=h.n-1;
- while h.a[p]<i do
- begin
- h.a[i]:=h.a[p];
- i:=p;
- end;
- h.a[i]:=i;
- end;
- procedure display(var h: heap; i: integer);
- begin
- for i:=1 to length(h.a) do
- writeln(h.a[i]);
- end;
- var
- n:integer;
- j:integer;
- h:heap;
- begin
- repeat
- readln(n);
- insert(h , n);
- until n=0;
- for j:=1 to length(h.a) do
- display(h, j);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement