Не знаю в чем дело, но сортировка не трогает первый элемент:
Код:
type
TMass = array of integer;
procedure downHeap(var a: TMass; k, N: integer);
var
newElt, child: integer;
begin
newElt := a[k];
while (k <= N div 2) do begin
child := 2 * k;
if (child < N) and (a[child] < a[child + 1]) then
inc(child);
if newElt >= a[child] then break;
a[k] := a[child];
k := child;
end;
a[k] := newElt;
end;
procedure heapSort(var a: TMass; N: integer);
var
i, temp: integer;
begin
for i := N div 2 downto 1 do
downHeap(a, i, N);
for i := N downto 2 do begin
temp := a[i];
a[i] := a[1];
a[1] := temp;
downHeap(a, 1, i - 1);
end;
end;