Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Frage: Warum funtioniert dieses bublbesort nicht? (https://www.delphipraxis.net/103354-frage-warum-funtioniert-dieses-bublbesort-nicht.html)

Royale 14. Nov 2007 18:16


Frage: Warum funtioniert dieses bublbesort nicht?
 
Ich hab da mal ne frage: ich versuche ein bubblesort zu programmieren mit delphi 3. Dann schau ich hier in die Hilfe und finde "swapvalues", die delphi 3 nicht kennt. swap funktioniert nicht und dieses programm unten sortiert nicht gescheit und entfernt Zahlen(zahlenreihe 1,5,3,2:daraus wird 1,3,3,2). Warum? ich bin noch neu und hab mal so gar keine Peilung. Bitte helft mir mal. Danke im voraus.


Hier der Quelltext

SQL-Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    memo2: TMemo;
    procedure Button1Click(Sender: TObject);

  private
    { Private-Deklarationen}
  public
    { Public-Deklarationen}
  end;

var
  Form1: TForm1;
  zufall : Array[1..200] of integer;
  vergleich: array [1..200] of integer;


   n,x,x1,x2,y:integer;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

begin
//höchstzahl array
N:= 1;

repeat

      zufall[n]:= trunc(random(100));              //zufallszahlen werden zugewiesen
      memo1.lines.add (inttostr(zufall[n]));      //ausgabe zufallszahlen
      vergleich[n]:=zufall[n];                    //vergleichsarray
      n:=n+1;
until n = 200;



      x:=1;


       repeat
              If zufall[x] > vergleich[x+1] Then          //vergleich
              zufall[x]:=vergleich[x+1];                  //tauschen
              memo2.lines.add (inttostr(zufall[x]));      //ausgabe

              x:=x+1;
       until x =200;

end;
end.

Nuclear-Ping 14. Nov 2007 18:21

Re: Frage: Warum funtioniert dieses bublbesort nicht?
 
Schau mal hier: http://www.dsdt.info/tipps/?id=368

Edit: ... und hier: http://www.delphipraxis.net/internal_redirect.php?t=344

DeddyH 14. Nov 2007 18:36

Re: Frage: Warum funtioniert dieses bublbesort nicht?
 
SwapValues könnte z.B. so aussehen:
Delphi-Quellcode:
procedure SwapValues(var a,b: integer);
begin
  a := a xor b;
  b := b xor a;
  a := a xor b;
end;

{Verständlichere Variante mit einer Hilfsvariablen:
procedure SwapValues(var a,b: integer);
var temp: integer;
begin
  temp := a;
  a := b;
  b := temp;
end;}
[edit] Der Sinn des Vergleichsarrays ist mir in Deinem Code verborgen geblieben, zumal Du das zu sortierende Array damit vergleichst :gruebel: [/edit]

everdream 14. Nov 2007 18:44

Re: Frage: Warum funtioniert dieses bublbesort nicht?
 
Zitat:

Zitat von Royale
Delphi-Quellcode:
zufall[x]:=vergleich[x+1]; //tauschen

Du tauscht nicht, du überschreibst.
Kein Wunder also, dass die 3 auf 1-mal 2 mal da ist und die 5 weg.

Benutze eine Hilfsvariable und mache einen Dreieckstausch:
Delphi-Quellcode:
hilf:=zufall[x]
zufall[x]:=vergleich[x+1];
vergleich[x+1]:=hilf;
So tauscht du


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz