Autor Beitrag
Breaks
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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 user profile iconraziel: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 04.01.2006 um 20:15
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 04.01.06 21:03 
minnime
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 171

Win 7
Delphi Prism 2011, C# (VS 2010)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 04.01.06 21:28 
Titel: Quelltext
Hab mal versucht, funktioniert aber net richtig.
Könnt ihr mal gucken! ;)

ausblenden volle Höhe 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:
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
{
//shakersort II
oben:=max;
posoben:=max-1;

repeat
  tausch:=0;
  unten:=posoben;
  for i:= unten to oben-1 do
    if feld[i]>feld[i+1] then
      begin
      inc(tausch);
      posunten:=i;
      m:=feld[i+1];
      feld[i+1]:=feld[i];
      feld[i]:=m;
      end;

  oben:=posunten;
  for i:= oben downto unten+1 do
    if feld[i]<feld[i-1] then
      begin
      inc(tausch);
      posoben:=i;
      m:=feld[i-1];
      feld[i-1]:=feld[i];
      feld[i]:=m;
      end;

until (tausch=0)}


count:=0;
repeat
  tausch:=0;
  for i:= count+1 to max-count-1 do
    if feld[i]>feld[i+1then
      begin
      inc(tausch);
      m:=feld[i+1];
      feld[i+1]:=feld[i];
      feld[i]:=m;
      end;
  if (tausch>0then
    for i:= max-count downto count+2 do
      if feld[i]<feld[i-1then
        begin
        inc(tausch);
        m:=feld[i-1];
        feld[i-1]:=feld[i];
        feld[i]:=m;
        end;
  inc(count);
until (tausch=0or (count>=max div 2)
end;


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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! :(

ausblenden 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,0then 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,0then 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 user profile iconraziel: Delphi-Tags hinzugefügt