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
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 :-)