sortowanie listy wskaźnikowej

0

Witam. Mam zrobioną liste w reprezentacji wskaźnikowej. Czy może mi ktoś pomóc jak będzie wyglądać sortowanie(od najmniejszego do najw.) w takiej liście ?

0

Witam,

zalezy jeszcze jakie sortowanie, bo jesli chodzi o najprostsze babelkowe to nie ma problemu.
Przy najprostrzej konstrukcji listy< czyli takiej:

  type
    wsk = ^obiekt;
    obiekt = record
       klucz : integer;
       nast : wsk;
    end;

Sortowanie bedzie wygladac tak:

procedure Babelek(var Element : wsk);
var 
  tmp, tmp2 : wsk;
begin
   if Element <> nil then
     begin
       tmp := Element^.nast;
         while (tmp <> nil) do
            begin
               if (Element^.klucz > tmp^.klucz) then  //tutak ustalasz rodzaj sortowania ( teraz jest od najmniejszego do najwiekszego)
                 begin
                    tmp2 := tmp;
                    tmp := Element;
                    Element := tmp2;
                 end;
              tmp := tmp^.nast;
            end;
         //rekurencja, wywolanie sortowania dla nastepnego elementu
        Babelek(Element^.nast);
   end;
   end;

Pisane na szybko, ale tak to mniej wiecej powinno wygladac, pozdrawiam

0

Widze, ze musze sie sam poprawic :) w procedurze Babelek nastepuje zamiana wskaznikow, a powinna byc zamiana kluczy..., pozdrawiam

0

Tutaj jest kod ja to ma wyglądać :-) dzięki wielkie za pomoc. Jako parametr q:PCell podajemy wskaźnik do elementu pierwszego.

procedure List.Sortowanie(q: PCell);
var tmp: PCell; tmp2: TElement;
 begin
   if q <>NIL then
    begin
     tmp:=q^.next;
       while (tmp <> NIL) do
         begin
           if (q^.Element > tmp^.Element) then
           begin
            tmp2:=tmp^.Element;
            tmp^.Element:= q^.Element;
            q^.Element:=tmp2;
           end;
         tmp:=tmp^.next;
        end;
       Sortowanie(q^.next);
    end;
 end;
0

TElement to stała typu integer :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0