Witam
Prosiłbym o wytłumaczenie tej procedury a konkretnie wstawiania elementu w odpowiednie miejsce na liście.
begin
while true do begin
e:=root; //Bierzemy pierwsze dwa elementy (najmniejsze)
e1:=e^.next;
if e1=nil then break; //Jeśli na liście jest tylko jeden element, kończymy
root:=e1^.next; //Usuwawmy te elementy z listy
new(n); //Tworzymy nowy węzeł
n^.left:=e; //Dołączamy do niego poprzednie elementy
n^.right:=e1;
n^.count:=e^.count+e1^.count; //Sumujemy ilości wystąpień
//Wstawiamy węzeł w odpowiednim miejscu
if (root = nil) or (n^.count <= root^.count) then begin
n^.next := root;
root := n;
continue;
end;
r := root;
while (r^.next <> nil) and (n^.count > r^.next^.count) do r := r^.next;
n^.next := r^.next;
r^.next := n;
end;
end;