AGB  ·  Datenschutz  ·  Impressum  







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

Mergesort

Ein Thema von sveno2k5 · begonnen am 24. Jan 2005 · letzter Beitrag vom 24. Jan 2005
Antwort Antwort
sveno2k5

Registriert seit: 24. Jan 2005
7 Beiträge
 
#1

Mergesort

  Alt 24. Jan 2005, 19:09
Hallo.

Habe versucht den mergesort zu programmieren, aber es klappt nicht. Eine und 2 Zahlen sortiert er noch korrekt, aber sobald die Gröse der zu sortierenden Zahlen grösser als 2 ist bricht Delphi ab. Weiss jemand woran das liegt?

Delphi-Quellcode:
procedure TFrmbubble.btmergeClick(Sender: TObject);
var zeit, start: integer;
    cursor: TCursor;
begin
 cursor := screen.Cursor;
 Screen.Cursor := crHourGlass;
 try
  start := 1;
  sortfeld := zufallsfeld;
  starte_zeit(Zeit);
  merge_sort(start,anzahl);
  stoppe_zeit(Zeit);
  anzahl := SpEdAnzahl.Value;
  kopieresortfeldzustrgrd;
  lbmsmerge.caption := inttostr(Zeit);
 finally
 Screen.Cursor := cursor;
 end;
end;
Delphi-Quellcode:
procedure merge_sort(anfang, ende: integer);
var hilfsfeld: TFeld;
    i,x,y,mitte, mitterechts: integer;
begin
 IF ende > anfang THEN
 begin
  mitte := (anfang + ende) DIV 2;
  mitterechts := mitte + 1;

  merge_sort(anfang,mitte);

  merge_sort(mitterechts,ende);

  x := anfang;
  y := mitterechts;
  FOR i := Anfang TO ende DO
  begin
   IF sortfeld[x] < sortfeld[y] THEN
   begin
    hilfsfeld[i] := sortfeld[x];
    sortfeld[x] := 1001;
    IF x < mitte THEN inc(x);
   end ELSE
   begin
    hilfsfeld[i] := sortfeld[y];
    sortfeld[y] := 1001;
    IF y < ende THEN inc(y);
   end;
  end;
  FOR i := anfang TO ende DO
   sortfeld[i] := hilfsfeld[i];
 end;
end;
Gruss Sven
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Mergesort

  Alt 24. Jan 2005, 19:29
Hab's nur schnell überflogen, kann es sein, dass es daran liegt:

Delphi-Quellcode:
  start := 1;
  sortfeld := zufallsfeld;
  starte_zeit(Zeit);
  merge_sort(start,anzahl); //<== Hier übergibst du "anzahl"
  stoppe_zeit(Zeit);
  anzahl := SpEdAnzahl.Value; //<== aber erst hinterher weist du "anzahl" einen Wert zu

Nachtrag: Herzlich willkommen in der DP!
  Mit Zitat antworten Zitat
sveno2k5

Registriert seit: 24. Jan 2005
7 Beiträge
 
#3

Re: Mergesort

  Alt 24. Jan 2005, 19:32
Zitat von Matze:
Hab's nur schnell überflogen, kann es sein, dass es daran liegt:

Delphi-Quellcode:
  start := 1;
  sortfeld := zufallsfeld;
  starte_zeit(Zeit);
  merge_sort(start,anzahl); //<== Hier übergibst du "anzahl"
  stoppe_zeit(Zeit);
  anzahl := SpEdAnzahl.Value; //<== aber erst hinterher weist du "anzahl" einen Wert zu

Nachtrag: Herzlich willkommen in der DP!
Danke für die freundliche Begrüssung

Daran liegts aber nicht, anzahl ist global deklariert und wird beim Button neu (den man vorher klicken muss um überhaupt ne zahlenreihe sortieren zu lassen) initialisiert.

Gruss Sven

*edit*

Hab mal das Prog beigefügt, dann kann man glaub ich besser erkennen wod er Fehler liegt.
Angehängte Dateien
Dateityp: rar bubble_473.rar (207,7 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
sveno2k5

Registriert seit: 24. Jan 2005
7 Beiträge
 
#4

Re: Mergesort

  Alt 24. Jan 2005, 21:58
Problem ist gelöst

Ich musste nur das hilfsfeld global und nicht lokal deklarieren, weil es sonst bei jedem Rekursionsaufruf neu generiert wird und es zum Stack Überlauf kommt
  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 06:41 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