Autor Beitrag
Dsler
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 03.10.05 15:03 
Hallo,

ich bin gerade dabei Delphi zu erlenen, habe einige Tutorials im netz gelesen, und mich informiert. Jetzt will ich Mergesort programmieren (ganz trivial, es soll am Ende nur funktionieren):-)
Im Netz und auch hier finde ich nur Codes, die sehr lang und kompliziert sind. Und ihre einzelnen Schritte kann ich nicht verstehen.. (www.delphi-forum.de/...highlight=mergesort).
Gibt es einen kurzen einfachen Code, mit dem man Mergesort programmieren kann, oder kann mir einer vllt mal die "komplizierten" Schritte bei Mergesort-programm erklären?
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Mo 03.10.05 15:42 
Hallo und :welcome:,

wie schon öfter erwähnt lohnt sich bei allgemeinen Informatik-Themen ein Blick in Wikipedia: Merge-Sort mit Bildchen und Beispiel schön erklärt :)

Gruß,
raziel

_________________
JSXGraph
Dsler Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 04.10.05 18:12 
..schon gemacht, benötige aber nen Code (ganz trivial)...werde aus wikipedia nicht richtig schlau
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 04.10.05 18:26 
Ein triviales Stück Code wirst du kaum finden, da Mergesort nicht ganz trivial ist. Ich wette aber, dass man hier im Forum auch n Stück Code dazu findet. Da war mal einer, der hat nach und nach alle Sort-Verfahren durchgefragt. Mergesort war da auch bei, wenn ich mich recht erinnere.

_________________
We are, we were and will not be.
Dsler Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 17.10.05 14:04 
...langsam bin ich am verzweifeln. :-(
Versuch anddauernd ein Programm in Delphi zu erstellen, welches Zahlen durch Zufall erstellt, sie mit Mergesort sortiert, und anschließend wieder ausgibt...
komme einfach nicht weiter..
ich weiß noch nicht mal, wie ich anfangen soll und die ganzen "Code-Fragmente" im Netz bringen mir auch nichts.

Bitte helft mir!!
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mo 17.10.05 14:06 
guck mal user profile iconmotzi 's pointertutorial an, da ist ein einfacher mergesort algo implementiert

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Dsler Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 17.10.05 14:32 
..finde das tutorial in bezug auf mergesort sehr kompliziert. Ich hab einen Implementierungs-Teil, nur ich weiß nicht weiter. Wie muss ich vorgehen, damit ich das Programm vollständig zum Laufen kriege..


ausblenden volle Höhe 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:
procedure mergesort(links:integer, rechts:integer);
var i,j,k,mid:integer;
    b: array[links..rechts] of datatype;
begin
  if (rechts-links>0then begin //Abbruchbedingung für Rekursion
    
    // Mittleres Element bestimmen und rekursiver Abstieg
    mid := (rechts+links) div 2
    mergesort(links, mid);
    mergesort(mid+1, rechts);
    
    // Mischen der sortierten Unterfelder
    // dabei wird ein Hilfsfeld b verwendet
    //   1. Daten in Hilfsfeld kopieren
    for i:=mid downto links do 
      b[i] := a[i];
    for j:=mid+1 to rechts do 
      b[rechts+mid+1-j] := a[j];
    
    //      Die Felder sind jetzt in b[] so angeordnet, dass sich die
    //      jeweils größten Elemente in der Mitte befinden
    //      i und j zeigen auf auf den linken, bzw. rechten Rand
    //    2. Mischen:
    for k:=links to rechts do
    begin
      if b[i]<b[j] then begin
        a[k]:=b[i];
        i:=i+1;
      end else begin
        a[k]:=b[j];
        j:=j-1;
      end;
    end// Ende von "for"
  end;   // Ende von "if" (Abbruchbedinung)
end;     // Ende von "procedure"


wo muss ich was noch hinschreiben im programm...z.B. Eingabefelder, Button,..

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mo 17.10.05 14:53 
user profile iconDsler hat folgendes geschrieben:
wo muss ich was noch hinschreiben im programm...z.B. Eingabefelder, Button,..

um den algo bei dir zu implementieren musst du nur
1. wissen, welche werte sortiert werden müssen
2. mergesort funktion und beispiel so lange studieren, bis dir klar wird wie du deine werte übergeben kannst.
das erfordert allerdings, dass du dein gehirn einsetzt :roll:

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
jro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31

Win XP Pro
Delphi 7 Enterprise
BeitragVerfasst: Mo 17.10.05 15:20 
Hi,

vielleicht hilft dir ja dieses anschauliche Tutorial (inkl. Simulation), den Algorithmus zu verstehen. ;)

Gruß
Jaqueline