Autor |
Beitrag |
Breaks
Hält's aus hier
Beiträge: 3
|
Verfasst: Mi 04.01.06 20:54
Hallo,
Ich soll einen Vortrag über shakersort erstellen und ein
simples Programm mit einigen Zufallszahlen erstellen, welche mithilfe des Shakersort-Verfahrens sortiert werden.
Ich weiß ja, dass Shakersort eine Erweiterung von Bubblesort ist, doch habe ich noch nichts gefunden, was bei der Implementierung im Quelltext anders als bei Bubblesort ist*?*
Kann mir da einer helfen??
Thx, im Voraus. ;) Moderiert von raziel: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 04.01.2006 um 20:15
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 04.01.06 21:03
|
|
minnime
      
Beiträge: 171
Win 7
Delphi Prism 2011, C# (VS 2010)
|
Verfasst: Mi 04.01.06 21:06
Eigentlich ganz einfach. Bubblesort arbeitet gewissermaßen unidirektional und Shakersort bidirektional. Mit Bubblesort wird die Liste nur von unten nach oben durchlaufen und dann fängt er unten wieder an, bei Shakersort geht er die Liste von oben nach unten wieder zurück.
Die entscheidende Stelle ist dabei die Schleife die die Bewegung der "Blase" durch die Liste vornimmt. Entweder gibt es zwei davon, die direkt hintereinander stehen und von der die letztere die Blase wieder absteigen lässt, oder es ist ein ein Umkehrmechanismus enthalten, der die Zählweise invertiert.[/i]
Edit: Da war einer schneller. Im in dem auf der Seite angeführten Code haben wir ein Beispiel mit zwei nacheinander durchlaufenen Schleifen.
|
|
Breaks 
Hält's aus hier
Beiträge: 3
|
Verfasst: Mi 04.01.06 21:28
Titel: Quelltext
Hab mal versucht, funktioniert aber net richtig.
Könnt ihr mal gucken!
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57:
| procedure Tfeld.shakersort; var oben,unten,posoben,posunten,count,m,i,tausch:integer; begin
count:=0; repeat tausch:=0; for i:= count+1 to max-count-1 do if feld[i]>feld[i+1] then begin inc(tausch); m:=feld[i+1]; feld[i+1]:=feld[i]; feld[i]:=m; end; if (tausch>0) then for i:= max-count downto count+2 do if feld[i]<feld[i-1] then begin inc(tausch); m:=feld[i-1]; feld[i-1]:=feld[i]; feld[i]:=m; end; inc(count); until (tausch=0) or (count>=max div 2) end; |
Moderiert von raziel: Delphi-Tags hinzugefügt
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mi 04.01.06 21:51
Ich mach das immer so:
Ich nehme mir eine kleine Liste mit, sagen wir, 5 Elemente, z.B. [5,3,1,4,2]
Dann gehe ich das PRogramm schrittweise durch (F7) und lasse mir die lokalen Variablen anzeigen ('watch').
Da ich ja weiss, wie das funktionieren soll, kann ich dann ganz leicht verifizieren, wo es hakt.
_________________ Na denn, dann. Bis dann, denn.
|
|
Breaks 
Hält's aus hier
Beiträge: 3
|
Verfasst: Do 05.01.06 17:32
Bin totall am verzweifeln...
Hab jetzt einen Stringgrid mit 10 Zahlen und hab den Quelltext mir nen anderen Quelltext genommen. Er macht zwar was, aber er Sortiert kein bisschen!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure TForm1.Button2Click(Sender: TObject); var x, y, i, li, re :integer; hilf :string; begin
repeat for x:=9 downto 0 do begin if sg1.cells[x-1,0] > sg1.cells[x,0] then begin hilf:=sg1.cells[x,0]; sg1.cells[x,0]:=sg1.cells[x+1,0]; sg1.cells[x+1,0]:=hilf ; k:=x; end; end; li:=k+1 for x:=li to r do begin if sg1.cells[x-1,0] > sg1.cells[x,0] then begin hilf:=sg1.cells[x,0]; sg1.cells[x,0]:=sg1.cells[x+1,0]; sg1.cells[x+1,0]:=hilf; k:=x; end; end; r:=k-1; until li>r; end; |
könnt ihr ma guckn was da net stimmt?!
Moderiert von raziel: Delphi-Tags hinzugefügt
|
|
|