Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler im Bubblesortcode? (https://www.delphipraxis.net/146660-fehler-im-bubblesortcode.html)

craash 24. Jan 2010 22:39


Fehler im Bubblesortcode?
 
Guten Abend,

ich habe ein Integerarray[0..3], welches nach Größe abnehmend sortiert werden soll. Bei einem Testlauf haben alle Elemente bevor der folgende Code ausgeführt wird den Zahlenwert 0.
Hinterher hat das zweite Element (Index 1) allerdings den Wert 4. Ich komme einfach nicht dahinter wieso das so ist...

Delphi-Quellcode:
  b:= 0;
  repeat
  for a:= 0 to 3 do
    begin
    if Array_Temp[a] < Array_Temp[a+1] then
      begin
      SwapTemp:= Array_Temp[a];
      Array_Temp[a]:= Array_Temp[a+1];
      Array_Temp[a+1]:= SwapTemp;
      end;
    end;
    Inc(b);
  until b= 3;
Wo ist mein Fehler? Hoffe ihr könnt mir weiterhelfen..


Grüße

[edit=mkinzler]Code-Tag durch Delphi-Tag ersetzt Mfg, mkinzler[/edit]

Delphi-Laie 24. Jan 2010 22:56

Re: Fehler im Bubblesortcode?
 
Zitat:

Zitat von craash
Guten Abend,

ich habe ein Integerarray[0..3], welches nach Größe abnehmend sortiert werden soll. Bei einem Testlauf haben alle Elemente bevor der folgende Code ausgeführt wird den Zahlenwert 0.
Hinterher hat das zweite Element (Index 1) allerdings den Wert 4. Ich komme einfach nicht dahinter wieso das so ist...

Code:
  b:= 0;
  repeat
  for a:= 0 to 3 do
    begin
    if Array_Temp[a] < Array_Temp[a+1] then
      begin
      SwapTemp:= Array_Temp[a];
      Array_Temp[a]:= Array_Temp[a+1];
      Array_Temp[a+1]:= SwapTemp;
      end;
    end;
    Inc(b);
  until b= 3;
Wo ist mein Fehler? Hoffe ihr könnt mir weiterhelfen..


Grüße

Was soll die äußere Schleife mit der Variable b? Die Variable b taucht jedenfalls in der inneren Schleife gar nicht auf!
Richtig ist natürlich, daß Bubblesort aus zwei Schleifen besteht, einer inneren und einer äußeren. Da deren Durchlaufanzahl jedoch determiniert (=vorherbestimmt) ist, sind zwei for-Schleifen eigentlich günstiger und logischer.

Desweiteren läuft die innere Schleife bis 3, ein Element wird jedoch mit a+1, also mit 4 indiziert - und das, obwohl das Array nur bis 3 läuft.

In diesem Forum findet sich genug zu diversen Sortieralgorithmen und natürlich auch Bubblesort. Auch meine Wenigkeit veröffentlichte mal ein Sortiervisualisierungsprogramm, in dem Bubblesort als elementarer Sortieralgorithmus enthalten ist.

mz23 25. Jan 2010 06:57

Re: Fehler im Bubblesortcode?
 
Schönen guten Morgen,

BubbleSort habe ich irgendwie so (wie unten gezeigt) in Erinnerung.

Warum verwendest Du (Sie) ein "repeat ... until" darin!? :-)

Delphi-Quellcode:
const amax = 3;

var  Carray : array[0..amax] of integer;
      a, b : integer;
...
Carray wird mit Werten gefüllt
...

for a:=0 to amax-1 do
    for b:=a+1 to amax do
        if Carray[a] < Carray[b] then
           Swap_Carray(a,b); // austauschen der Inhalte an den Positionen a und b
Mit freundlichen Grüßen
Manfred Zenns

user0815 25. Jan 2010 07:12

Re: Fehler im Bubblesortcode?
 
http://www.stefan-baur.de/cs.algo.bubblesort.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:04 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