Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Bubblesort programmieren


Flyx - Mo 10.10.11 18:47
Titel: Bubblesort programmieren
Hallo,
ich möchte gerne eine Datei, die aus Wörtern besteht, mit dem Bubblesort sortieren. Ich öffne sie mit Opendialog und will
die sortierten Daten in ein Memo einfügen. Doch ich habe bis jetzt nur sehr wenige Programmiererfahrungen gemacht und bin mir
nicht sicher, wie ich es anstellen soll. Ich habe einen Quellcode geschrieben, der nun leider nicht funktioniert. Vielleicht kann mir jemand helfen und mir die Fehler im Programm zeigen und berichtigen?

Vielen Dank im Voraus :D


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
unit Bubblesort;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);

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

var
  Form1: TForm1;
  Daten: array of string;

implementation

{$R *.DFM}

procedure TForm1.Button2Click(Sender: TObject);
begin
Opendialog1.execute;
edit1.text:=opendialog1.filename;
end;

procedure Bubblesort;
var i,j:integer; speicher:string;
begin
for i:=0 to length(daten)-1 do
for j:=i+1 to length(daten) do
if Daten[i]>Daten[j] then
 begin speicher:=Daten[j];
       Daten[j]:=Daten[i];
       Daten[i]:=speicher;
       end;
 end;

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
bubblesort;
for i:=0 to length(daten)-1 do
begin memo1.lines.add(daten[i]);
end;

end;

end.


Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


Gausi - Mo 10.10.11 18:55

Hallo und :welcome: in der Entwickler-Ecke,


Delphi-Quelltext
1:
2:
for i:=0 to length(daten)-1 do
for j:=i+1 to length(daten) do

Ein Array geht von 0 bis Length-1. ;-)


Flyx - Mo 10.10.11 19:04

Das heißt, es müssten beide Male length-1 stehen?
Aber es funktioniert immer noch nicht...


Gausi - Mo 10.10.11 19:17

Laufen müsste es jetzt aber, d.h. der Compiler zeigt keinen Fehler mehr an, und das Programm stürzt nicht ab, oder?

Sortieren müsste der Algorithmus auch. Das ist zwar kein Bubblesort, aber wenn ich das richtig überblicke, sollte das Verfahren hier auch funktionieren.


bole - Mo 10.10.11 19:52

Das nix passiert liegt wahrscheinlich auch darn das Du die Daten aus dem File nicht in dein Array ladest. Du ruft zwar den Open Dialog auf, aber schreibst den Datenamen nur in ein Edit...

Gruss
Bole


Delphi-Laie - Fr 14.10.11 13:04

user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Das ist zwar kein Bubblesort, aber wenn ich das richtig überblicke, sollte das Verfahren hier auch funktionieren.


Welcher Sortieralgorithmus ist es denn dann?

Ich könnte fast schwören, daß es sich hierbei um Bubblesort handelt.


Oliver Marx - Fr 14.10.11 13:22

Hi,

Bubblesort kann es nicht sein, da bei Bubblesort immer benachbarte Daten verglichen werden. In diesem Fall handelt es sich um eine Art von Minsort. Allerdings wird beim echten Minsort bei jedem Hauptschleifendurchlauf maximal einmal getauscht.

Viele Grüße

Oliver


Delphi-Laie - Fr 14.10.11 13:31

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Ach so, das übersah ich, danke! Ein Glück, daß ich nicht vereidigt wurde.

Dann ist es eine Form des Simple-/Naiselsorts, wie sie auf sortieralgorithmen.de (und auch in meinem Sortierkino) enthalten ist.