AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Frage zum Sortieren einer verketteten Liste
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zum Sortieren einer verketteten Liste

Ein Thema von Chris P · begonnen am 20. Aug 2004 · letzter Beitrag vom 24. Aug 2004
Antwort Antwort
Seite 1 von 3  1 23      
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#1

Frage zum Sortieren einer verketteten Liste

  Alt 20. Aug 2004, 16:28
HI Leute,

was ist sinnvoller beim Sortieren einer einfach verketteten Liste:

Wenn man die Inhalte der Elemente sortiert oder die Zeiger ansich.

Ich benutze den Bubblesort.


Was würdet ihr emfehlen?
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#2

Re: Frage zum Sortieren einer verketteten Liste

  Alt 20. Aug 2004, 16:33
Immer den Zeiger an sich.

Du wirst aber wahrscheinlich 3 Zeiger füren müssen.

Code:
Prev
Current <- Die beiden werden
Next   <- verglichen
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Frage zum Sortieren einer verketteten Liste

  Alt 20. Aug 2004, 16:39
Hier meine Prozedur:
Delphi-Quellcode:
procedure TForm1.SortList();
var
   Loop1, Loop2: Integer;
   Nav : PZeiger;
   Help: PZeiger;
begin

   Nav := Root;

   for Loop1 := 1 to 4 do
   begin
      for Loop2 := Loop1 to 4 do
      begin
         if Nav^.Name > Nav^.Next^.Name then
         begin
            Help := Nav;
            Nav := Nav^.Next;
            Nav^.Next := Help;
         end;
      Nav := Nav^.Next;
      end;
   Nav := Root;
   end;
   
end;
Aber es funktioniert nicht.
Die Zahl 4 in der FOR-Schleife ist die Anzahl der Elemente
Wo liegt der Fehler?
Bräuchte man noch einen 2. Hilfszeiger?
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#4

Re: Frage zum Sortieren einer verketteten Liste

  Alt 20. Aug 2004, 16:52
moin,

kann sein, dass ich das jetzt irgendwie falsch interpretiere, aber willstu die Liste nicht nach dem Inhalt sortieren? Sonst sortierst du doch lediglich eine Liste mit Speicheradressen?!
EDIT: hab übersehen, das du das schon tust, sorry.
Peter Enenkel
  Mit Zitat antworten Zitat
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Frage zum Sortieren einer verketteten Liste

  Alt 20. Aug 2004, 16:55
Die Inhalte der Elemente werden nur miteinander verglichen und dann die entsprechenden
Adressen vertauscht. Dadurch sollte die Liste eigentlich sortiert sein!

Geht aber leider nicht...
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#6

Re: Frage zum Sortieren einer verketteten Liste

  Alt 20. Aug 2004, 16:59
kann es sein, dass du den Tauschvorgang jedesmal wieder rückgängig machst? Ich glaube, die zwei auskommentierten Zeilen sind falsch/überflüssig.

Zitat von Chris P:
Delphi-Quellcode:
procedure TForm1.SortList();
var
   Loop1, Loop2: Integer;
   Nav : PZeiger;
   Help: PZeiger;
begin

   Nav := Root;

   for Loop1 := 1 to 4 do
   begin
      for Loop2 := Loop1 to 4 do
      begin
         if Nav^.Name > Nav^.Next^.Name then
         begin
            Help := Nav;
            Nav := Nav^.Next;
            Nav^.Next := Help;
         end;
      // Nav := Nav^.Next;
      end;
   // Nav := Root;
   end;
   
end;
EDIT: ich befürcht ich hab schon wieder Quark geschrieben
EDIT2: ich glaub ich muss mal ein paar Minuten nachdenken.
Peter Enenkel
  Mit Zitat antworten Zitat
Benutzerbild von atreju2oo0
atreju2oo0

Registriert seit: 5. Dez 2003
Ort: Berlin
289 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Frage zum Sortieren einer verketteten Liste

  Alt 20. Aug 2004, 17:05
Der Quelltext müsste eigentlich stimmen nur ein Fehler ist drin.
Bei Bubblesort muss man den Algo sooft anwenden bis keine Verschiebung mehr
vorkommt. Deshalb ist er ja auch relativ langsam. Besser wäre IMO Quicksort zu benutzen,
da sich das mit Zeigern eh sehr schön lösen lässt.
Thomas
  Mit Zitat antworten Zitat
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Frage zum Sortieren einer verketteten Liste

  Alt 20. Aug 2004, 17:05
Das 1. auskommentierte setzt doch den Laufzeiger auf das nächste Element.
Denn dann wird doch das nächste Element verglichen.

Das 2. muss auch sein denn die Liste muss wieder von Anfang durchlaufen werden.

Bsp: Wenn das Element mit dem größten Inhalt ganz nach rechts geschoben wird, muss man wieder von vorne anfangen und das zweit größte Element nach rechts schieben.

Das ist der normale Bubblesort
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#9

Re: Frage zum Sortieren einer verketteten Liste

  Alt 20. Aug 2004, 17:18
Nicht getestet:

So sieht Bubblesort aus!!!

Delphi-Quellcode:
var pPrevPrev,
    pPrev,
    pNext : PList;

begin
  // nur anwenden wenn mindestens ein Element enthalten
  pPrevPrev := nil;
  pPrev := pFirst;
  pCur := pFirst^.pNext;
  repeat
    lSwap := false;
    
    while pCur <> nil do
      begin
        if nicht richtige reihenfolge zwischen pPrev und pCur then
           begin
             pPrevPrev^.pNext := pCur;
             pCur^.pNext := pPrev;
             pPrev^.pNext := pCur^.pNext;
             lSwap := true;
           end;
        // Nächster
        pPrevPrev := pPrev;
        pPrev := pCur;
        pCur := pCur^.pNext;
      end;

  until lSwap;
end;
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Frage zum Sortieren einer verketteten Liste

  Alt 20. Aug 2004, 17:22
Zitat:
if nicht richtige reihenfolge zwischen pPrev und pCur then
Was bedeutet das?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz