Sortierverfahren schrittweise in Listbox ausgeben

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
echochrome
Beiträge: 11
Registriert: Sa 22. Jun 2013, 15:21

Sortierverfahren schrittweise in Listbox ausgeben

Beitrag von echochrome »

Hi Leute,

und schon wieder melde ich mich mit einem schrecklich (wahrscheinlich) leicht zu lösendem Problem.

Ich habe diverse Sortieralgorithmen in meinem Projekt verarbeitet und versuche jetzt neben dem Button (komplett sortieren) noch einen Button (schrittweise sortieren) zu erstellen. Bei diesem harpert es aber leider gerade.

Zum Quelltext (hier Bubblesort)

Code: Alles auswählen

procedure bubblesort(var a: tzahlen);
var
  x, i: integer;
begin
  for x := 2 to n do
  begin
    for i := n downto x do
      if a[i] < a[i - 1] then
      begin
        tauschen(a[i], a[i - 1]);
      end;
  end;
end;   

Code: Alles auswählen

 
procedure anzeige_f3ld(z: tzahlen);
var
  inline_numbers: string;
begin
  Form2.ListBox2.Clear;
  for i := 1 to n do
    inline_numbers := inline_numbers + IntToStr(z[i]) + ' ';
  Form2.ListBox2.Items.Add(inline_numbers);
end;
 
procedure tauschen(var x, y: integer);
var
  h: integer;
begin
  h := x;
  x := y;
  y := h;
end; 
 
Habt ihr eine Ahnung wie ich es Schrittweise umbauen kann??
Ich hatte versucht einfach in eine Zählschleife den Ausgabebefehl mit einzubauen (leider ohne erfolg)

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Sortierverfahren schrittweise in Listbox ausgeben

Beitrag von Michl »

Wenn ich das jetzt richtig gedeutet habe, willst du die einzelnen Schritte von bubblesort in Form2.ListBox2 angezeigt bekommen???

Dann mach doch einfach bei jeder Sortierung einen zusätzlichen String:

Code: Alles auswählen

function MeinArrayToString(a: TZahlen):string;  //Mögliche Ausgabe deiner TZahlen
var
  i:integer;
begin
  result:='';
  for i:=1 to n do result:=result+inttostr(a[i])+' ';
//  for i:=low(a) to high(a) do result:=result+inttostr(a[i])+' ';   //besser low() und high()! 
end;
 
procedure bubblesort(var a: tzahlen);
var
  x, i: integer;
begin
  Form2.Listbox2.Clear;                                  //Listbox leeren
  for x := 2 to n do                                     //Achtung, falls dein Array vom Typ [0..n] ist, dann muss hier eine 1 (statt 2) stehen!
  begin
    for i := n downto x do
      if a[i] < a[i - 1] then
      begin
        tauschen(a[i], a[i - 1]);
        Form2.Listbox2.Items.Add(MeinArrayToString(a));  //Bei jedem Sortiervorgang neuen String in Listbox einfügen
      end;
  end;
end;  

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

echochrome
Beiträge: 11
Registriert: Sa 22. Jun 2013, 15:21

Re: Sortierverfahren schrittweise in Listbox ausgeben

Beitrag von echochrome »

super! danke.. ich hatte es vorhin so probiert, allerdings ohne Erfolg.
Jetzt klappt es super!

Komischerweise sortiert der Algorithmus nicht wirklich gut... also nicht wie die Regel es eigentlich besagt.

Antworten