AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

BubbleSort Problem

Ein Thema von Chiqupon · begonnen am 7. Dez 2013 · letzter Beitrag vom 8. Dez 2013
Antwort Antwort
Chiqupon

Registriert seit: 7. Okt 2013
6 Beiträge
 
#1

AW: BubbleSort Problem

  Alt 8. Dez 2013, 02:20
Danke Es funktioniert soweit nur egal was ich versuche ich kriege es nur hin das Listbox2 unsortiert ist und Listbox 1 sortiert :/
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#2

AW: BubbleSort Problem

  Alt 8. Dez 2013, 02:35
Hallo,

schon mal ein: ListBox2.Items.Assign (ListBox1.Items); versucht?

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Chiqupon

Registriert seit: 7. Okt 2013
6 Beiträge
 
#3

AW: BubbleSort Problem

  Alt 8. Dez 2013, 02:55
Klappt auch nicht hier mal mein Quellcode:
Code:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    ListBox2: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BubbleSort;
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}
procedure TForm1.BubbleSort;
var
  i, j : Integer;

  procedure Swap (const Index0, Index1 : Integer);
  var
    i0, i1 : Integer;
    s : string;
  begin
    i0 := StrToInt (ListBox1.Items [Index0]);
    i1 := StrToInt (ListBox1.Items [Index1]);
    if i0 > i1 then
      begin
        s := ListBox1.Items [Index0];

        ListBox1.Items [Index0] := ListBox1.Items [Index1];
        ListBox1.Items [Index1] := s
      end
  end;

begin
  for i := 0 to ListBox1.Items.Count - 1 do
    for j := ListBox1.Items.Count - 1 downto i do
      Swap (i, j)
end;
{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Items.Add (IntToStr (Random (100) - 1));
  ListBox2.Items.Assign (ListBox1.Items);
  Bubblesort
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
end;

end.
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#4

AW: BubbleSort Problem

  Alt 8. Dez 2013, 03:22
Hallo,

naja, das ist schon klar, wenn Du denn BubbleSort erst nach der Zuweisung an ListBox1 ausführst, dann kann das natürlich nicht funktionieren. Klatsch Dir doch mal noch ein weiteren TButton auf Dein Formular und versuch es so:
Delphi-Quellcode:
procedure TForm1.BubbleSort;
var
 i, j : Integer;

 procedure Swap (const Index0, Index1 : Integer);
 var
   i0, i1 : Integer;
   s : string;
 begin
   i0 := StrToInt (ListBox1.Items [Index0]);
   i1 := StrToInt (ListBox1.Items [Index1]);
   if i0 > i1 then
     begin
       s := ListBox1.Items [Index0];

       ListBox1.Items [Index0] := ListBox1.Items [Index1];
       ListBox1.Items [Index1] := s
     end
 end;

begin
 for i := 0 to ListBox1.Items.Count - 1 do
   for j := ListBox1.Items.Count - 1 downto i do
     Swap (i, j)
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Items.Add (IntToStr (Random (100) - 1));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  BubbleSort;
  ListBox2.Items.Assign (ListBox1.Items)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize
end;
Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.375 Beiträge
 
Delphi 12 Athens
 
#5

AW: BubbleSort Problem

  Alt 8. Dez 2013, 09:44
Wie gesagt, du hast zwar eine Methode BubbleSort implementiert, sie aber nicht verwendet, sondern stattdessen die eigene Sortierung der ListBox (ListBox2.Sorted:=True; ) verwendet.



@Volker Z.: Wenn man davon ausgeht, daß ListBox1 die unsortierte Liste darstellt und ListBox2 die Sortierte, dann ist bei dir ein Fehler drin, denn du sortierrst Beides.
Erst Die ListBox1 in die ListBox2 kopieren und dann die ListBox2 sortieren.

Außerdem wäre es nicht schlecht, wenn man die zu sortierende Liste ListBox als Parameter an die Methode BubbleSort übergeben hätte, dann müßte man jetzt nicht die komplette BubbleSort-Methode umbauen, sondern bräuchte nur Button2Click "reparieren".

Außerdem macht deine Prozedur Swap etwas total Falsches, denn eigentlich müßßte sie CompareAndSwap heißen, da sie sonst nicht das macht, was sie behauptet,
oder man muß den Vergleich da rausnehmen.

PS: Ja, man kann zwar das Befehlsabschlußzeichen ; weglassen, aber ich empfehle die es dennoch zu schreiben, wenn Eines hingehören würde.
- erstmal sieht der Code dann einheitlicher aus
- und dann schreib mal einen weiteren Befehl dahinter und freu dich, wie der Compiler erstmal rummeckert.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 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