Hvis dette virker, s� er vi heldige :-)

/Martin


procedure pivotsortering(var liste: henv);
var
  element, stoerre, lavere : henv;
begin
  { hvis liste kun indeholder �t element, s� er vi f�rdige }
  if (liste = nil) then
    exit;

  { disse lister er tomme fra starten }
  stoerre := nil;
  lavere  := nil;

  { sk�rer pivot v�k }
  pivot   := fjern_pivot(liste);

  element := liste;

  { vi lader element l�be igennem listen }
  while element <> nil do
  begin
    if element^.noegle < pivot^.noegle then
    begin { elementet er mindre end vores pivot }
      { vi kobler elementet ind i starten af lavere }
      element^.naeste := lavere;
      lavere          := element;
    end
    else
    begin { elementet er st�rre end vores pivot }
      { vi kobler elementet ind i starten af st�rre }
      element^.naeste := stoerre;
      stoerre         := element;
    end;
  end;

  { s� skal lavere sorteres... }
  pivotsortering(lavere);
  { og det skal st�rre ogs� }
  pivotsortering(stoerre);

  { vi s�tter listerne sammen, s� lavere kommer f�rst,
    s� pivot og til sidst st�rre }
  liste   := lavere;
  element := lavere;
  { vi skal finde det sidste element i listen... }
  while element^.naeste <> nil do
    elememt := element^.naeste;
  
  { ...s�dan at vi kan s�tte det til at pege p� vores pivot }
  element^.naeste := pivot;
  pivot^.naeste   := stoerre;

end;

{ Finder og fjerner pivot fra liste }
function fjern_pivot(var liste : henv): henv;
begin
  result := liste;
  liste  := liste^.naeste;
end;

Besvar via email