Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi bubblesort funzt ni need help (https://www.delphipraxis.net/112545-bubblesort-funzt-ni-need-help.html)

The_Doomed 23. Apr 2008 07:16


bubblesort funzt ni need help
 
Code:
procedure TForm1.sortbtnClick(Sender: TObject);
var i,j,n : integer;
    hilfe : string;
begin
 f2.Items.Clear;
 n:=f1.Items.Count-1;

 for i:=0 to n do feld[i+1]:=f1.Items[i];

 for i:=1 to n-1 do
  for j:=1 to n-1 do
    if feld[j]>feld[j+1] then
      begin
      hilfe:=feld[i];
      feld[i]:=feld[j];
      feld[j]:=hilfe;
      end;

  for i:=0 to n+1 do
  begin
  f2.Items.Add(feld[i+1]);
  end;
end;
kann mir jemand sagen was da dran falsch is ich krieg grad nix auf die reihe
danke schonmal vornweg

Klaus01 23. Apr 2008 07:21

Re: bubblesort funzt ni need help
 
Ist es richtig, dass das feld bei Dir ein Array of Integer ist?
Delphi-Quellcode:
for i:=0 to n do feld[i+1]:=f1.Items[i];
Dann geht das obige nicht, hier versuchst Du einen String einen Integertypen zuzuweisen.
Wenn dem so sein sollte, dann hilft Dir StrToInt():

Grüße
Klaus

DP-Maintenance 23. Apr 2008 07:23

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "VCL / WinForms / Controls" nach "Sonstige Fragen zu Delphi" verschoben.
Das hat mit der VCL nichts zu tun.

The_Doomed 23. Apr 2008 07:25

Re: bubblesort funzt ni need help
 
das isn array of string aber ich weiß ni was du denkst was ich umwandeln sollte

DeddyH 23. Apr 2008 07:29

Re: bubblesort funzt ni need help
 
Außerdem tauschst Du wohl die falschen Elemente:
Zitat:

Delphi-Quellcode:
    if feld[j]>feld[j+1] then
      begin
      hilfe:=feld[i];
      feld[i]:=feld[j];
      feld[j]:=hilfe;
      end;

Sollte wohl so heißen:
Delphi-Quellcode:
    if feld[j]>feld[j+1] then
      begin
      hilfe:=feld[j+1];
      feld[j+1]:=feld[j];
      feld[j]:=hilfe;
      end;

The_Doomed 23. Apr 2008 07:33

Re: bubblesort funzt ni need help
 
lol na ja jetzt verschwinden alle elemente muss ich da dann j+1 ausgeben lassen

Klaus01 23. Apr 2008 07:37

Re: bubblesort funzt ni need help
 
Zitat:

Zitat von The_Doomed
das isn array of string aber ich weiß ni was du denkst was ich umwandeln sollte

Wenn das ein Array of String ist, dann kannst
weiter unten nicht auf größer oder kleiner prüfen.
Ich meine das kannst Du schon, macht in diesem Zusammenhang aber wenig Sinn.
Oder willst Du Buchstaben sortieren?

Grüße
Klaus

marabu 23. Apr 2008 12:42

Re: bubblesort funzt ni need help
 
Hi,

Zitat:

Zitat von The_Doomed
... kann mir jemand sagen was da dran falsch is ich krieg grad nix auf die reihe ...

die gute Nachricht ist: Nur die Schleife ist so richtig falsch. Die schlechte Nachricht: BubbleSort ist nicht viel mehr.

Vielleicht solltest du dir mal diesen Thread durchlesen: Arrays sortieren

Grüße vom marabu

hoika 23. Apr 2008 13:02

Re: bubblesort funzt ni need help
 
Hallo,

Dein Bubblesort ist falsch.

Delphi-Quellcode:
for i:=1 to n-1 do
  for j:=i+1 to n-1 do
Du hast statt i+1 nur 1 genommen.

Ich würde besser Quicksort nehmen,
aber einer bestimmten Array-Zahl wird BubbleSort sehr langsam.


Heiko

TeronG 23. Apr 2008 13:10

Re: bubblesort funzt ni need help
 
und nicht
Delphi-Quellcode:
if feld[j]>feld[j+1] then
sondern
Delphi-Quellcode:
if feld[i]>feld[j] then

The_Doomed 23. Apr 2008 16:06

Re: bubblesort funzt ni need help
 
lol wenn ich aber schon bubblesort ni hinkrieg dann brauch ich mit quicksort erst ma gar ni anzufagen
so muss jetzt ma testen obs funzt

The_Doomed 23. Apr 2008 16:49

Re: bubblesort funzt ni need help
 
Delphi-Quellcode:
var i,j,n:integer;
f:array[0..10]of string;
h:string;
begin
n:=listbox1.Items.Count-1;

for i:=0 to n do f[i+1]:=listbox1.Items[i];

for i:=1 to n-1 do
  for j := i+1 to n - 1 do
    if f[j]>f[j+1] then
      begin
      h:=f[j+1];
      f[j+1]:=f[j];
      f[j]:=h;
      end;

       for i:=0 to n+1 do
  begin
  listbox2.Items.Add(f[i+1]);
  end;
er tauscht immer noch nicht oder gibts es nicht sortiert aus

bluesbear 23. Apr 2008 17:50

Re: bubblesort funzt ni need help
 
Zwei geschachtelte for-Schleifen :gruebel:
Also ich kenne den Bubblesort nur so, wie auch hier beschrieben:
http://de.wikipedia.org/wiki/Bubblesort

DeddyH 23. Apr 2008 17:55

Re: bubblesort funzt ni need help
 
Das sind aber auch 2 Schleifen :zwinker:

bluesbear 23. Apr 2008 18:02

Re: bubblesort funzt ni need help
 
Zitat:

Zitat von DeddyH
Das sind aber auch 2 Schleifen :zwinker:

Aber keine If-Schleifen! :drunken:

DeddyH 23. Apr 2008 18:07

Re: bubblesort funzt ni need help
 
:lol:

DeddyH 23. Apr 2008 18:20

Re: bubblesort funzt ni need help
 
Der Fehler ist: Du musst in beiden Schleifen bei 0 beginnen. Sparen kannst Du Dir nach dem ersten Durchlauf das letzte Element, das enthält garantiert den höchsten Wert.

Klaus01 23. Apr 2008 18:35

Re: bubblesort funzt ni need help
 
Meines Erachtens muss die innere Schleife nicht bei 0 starten.
Delphi-Quellcode:
for i:=0 to 9 do
  for j := i + 1 to 9 do
    begin
      if data[i] > data[j] then
        begin
          dummy:=data[i];
          data[i]:=data[j];
          data[j]:=dummy;
        end;
    end;
Es reicht wenn sie beim aktuellen Stand +1 der Vorgängerschleife startet.

Grüße
Klaus

The_Doomed 23. Apr 2008 18:37

Re: bubblesort funzt ni need help
 
Delphi-Quellcode:
var i,j,n:integer;
f:array[0..10]of string;
h:string;
begin
n:=listbox1.Items.Count;

for i:=0 to n-1 do f[i+1]:=listbox1.Items[i];

for i:=1 to n do
  for j := 1 to n-1 do
    if f[j]>f[i] then
      begin
      h:=f[i];
      f[i]:=f[j];
      f[j]:=h;
      end;

       for i:=0 to n do
  begin
  listbox2.Items.Add(f[i+1]);
  end;
jo das wars danke
mann mann mann is schon ganz schön schwer ^^

DeddyH 23. Apr 2008 18:40

Re: bubblesort funzt ni need help
 
Angenommen, mein Array sieht so aus: 9,8,7,6,5,4,3,2,1
Nach dem ersten Durchlauf ist der Stand dann: 8,7,6,5,4,3,2,1,9
Also kannst Du Dir nicht das erste, sondern das letzte Element sparen.

Der.Kaktus 23. Apr 2008 18:42

Re: bubblesort funzt ni need help
 
Zitat:

Zitat von The_Doomed
Delphi-Quellcode:
var i,j,n:integer;
f:array[0..10]of string;
h:string;
begin
n:=listbox1.Items.Count;

for i:=0 to n-1 do f[i+1]:=listbox1.Items[i];

for i:=1 to n do
  for j := 1 to n-1 do
    if f[j]>f[i] then
      begin
      h:=f[i];
      f[i]:=f[j];[pre]
      f[j]:=h;
      end;

       for i:=0 to n do
  begin
  listbox2.Items.Add(f[i+1]);
  end;
jo das wars danke
mann mann mann is schon ganz schön schwer ^^

Ich lese es jetzt erst... :gruebel: Listbox?..da gibt es
Delphi-Quellcode:
Listbox1.sorted:=TRUE;

bluesbear 23. Apr 2008 18:50

Re: bubblesort funzt ni need help
 
Zitat:

Zitat von Der.Kaktus
Ich lese es jetzt erst... :gruebel: Listbox?..da gibt es
Delphi-Quellcode:
Listbox1.sorted:=TRUE;

Der war gut! :lol:

Aber das mit 2 for-Schleifen zu machen - wer kommt auf sone Idee? Wenn man da eine bereits sortierte Liste reinsteckt, hat man genausoviele Durchläufe wie bei einer beliebig unsortierten. Das ist irgendwie Blödsinn, finde ich...

Der.Kaktus 23. Apr 2008 18:52

Re: bubblesort funzt ni need help
 
Zitat:

Zitat von bluesbear
Zitat:

Zitat von Der.Kaktus
Ich lese es jetzt erst... :gruebel: Listbox?..da gibt es
Delphi-Quellcode:
Listbox1.sorted:=TRUE;

Der war gut! :lol:

Aber das mit 2 for-Schleifen zu machen - wer kommt auf sone Idee? Wenn man da eine bereits sortierte Liste reinsteckt, hat man genausoviele Durchläufe wie bei einer beliebig unsortierten. Das ist irgendwie Blödsinn, finde ich...

Die Wege des Herrn.. :thumb:

DeddyH 23. Apr 2008 18:53

Re: bubblesort funzt ni need help
 
Hier noch eine Bubblesort-Variante:
Delphi-Quellcode:
procedure Bubblesort(const sList: TStrings);
var i,j,k: integer;
    getauscht: Boolean;

    procedure tausche(const a,b: integer);
    var tausch: string;
    begin
      tausch := sList[a];
      sList[a] := sList[b];
      sList[b] := tausch;
      getauscht := true;
    end;

begin
  if sList.Count > 1 then
    begin
      sList.BeginUpdate;
      k := sList.Count - 2;
      i := 0;
      repeat
        getauscht := false;
        for j := 0 to k - i do
          if AnsiCompareStr(sList[j], sList[j + 1]) > 0 then
            tausche(j, Succ(j));
        inc(i);
      until (i > k) or not getauscht;
      sList.EndUpdate;
    end;
end;
@Kaki: geht wohl eher um den Lerneffekt :zwinker:

The_Doomed 23. Apr 2008 19:03

Re: bubblesort funzt ni need help
 
richtig erfasst ich weiß dass es eine funktion für das sortieren gibt aber es
geht darum den algo zu verstehen und verschiedene sortierverfahren unterscheiden zu können
und das bubblesort umständlich und ineffizient ist ist ja auch zur genüge bekannt
aber wer kein bubblesort kann wird weder insertionsort noch quicksort verstehen können
MfG The_Doomed

Luckie 23. Apr 2008 19:05

Re: bubblesort funzt ni need help
 
Zitat:

Zitat von The_Doomed
richtig erfasst ich weiß dass es eine funktion für das sortieren gibt aber es
geht darum den algo zu verstehen und verschiedene sortierverfahren unterscheiden zu können
und das bubblesort umständlich und ineffizient ist ist ja auch zur genüge bekannt
aber wer kein bubblesort kann wird weder insertionsort noch quicksort verstehen können
MfG The_Doomed

Hä? Könntest du das noch mal bitte mit Satzzeichen und Groß- und Kleinschreibung schreiben?

The_Doomed 23. Apr 2008 19:33

Re: bubblesort funzt ni need help
 
Zitat:

Richtig erfasst! Ich weiß, dass es eine Funktion für das Sortieren gibt, aber es
geht darum den Algo zu verstehen und verschiedene Sortierverfahren unterscheiden zu können.
Dass bubblesort umständlich und ineffizient ist, ist ja auch zur genüge bekannt.
Aber wer kein Bubblesort beherrscht, wird weder Insertionsort noch Quicksort verstehen können.
MfG The_Doomed
Besser?


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