AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi problem mit MergeSort-Code -- zu langsam
Thema durchsuchen
Ansicht
Themen-Optionen

problem mit MergeSort-Code -- zu langsam

Ein Thema von Totti · begonnen am 21. Mai 2005 · letzter Beitrag vom 21. Mai 2005
Antwort Antwort
Benutzerbild von Totti
Totti

Registriert seit: 1. Dez 2004
Ort: Harrislee
59 Beiträge
 
Delphi 2005 Personal
 
#1

problem mit MergeSort-Code -- zu langsam

  Alt 21. Mai 2005, 13:17
Delphi-Quellcode:
procedure mergeIt(Vli,Vmi,Vre: integer; var liste: array of integer);
var
  tmpArr: array of integer;
  k,IndexLi,IndexRe,IndexTmp: integer;
begin
  setlength(tmpArr,Vre-Vli+1);
  IndexLi:=Vli;
  IndexRe:=Vmi+1;
  IndexTmp:=0;
  repeat
    if liste[IndexLi] <= liste[IndexRe] then
      begin
        tmpArr[IndexTmp]:=liste[IndexLi];
        inc(IndexTmp);
        inc(IndexLi);
      end
    else
      begin
        tmpArr[IndexTmp]:=liste[IndexRe];
        inc(IndexTmp);
        inc(indexRe);
      end;
  until (IndexLi > Vmi) or (IndexRe > Vre);
  while IndexLi <= Vmi do
    begin
      tmpArr[IndexTmp]:=liste[IndexLi];
      inc(IndexTmp);
      inc(indexLi);
    end;
  while IndexRe <= Vre do
    begin
      tmpArr[IndexTmp]:=liste[IndexRe];
      inc(IndexTmp);
      inc(IndexRe);
    end;
  for k:=Vli to Vre do
    liste[k]:=tmpArr[k-Vli];
end;
Delphi-Quellcode:
procedure mergeSort(Vli,Vre: integer; var liste: array of integer); //mischSortieren
var
  mi: integer;
begin
  if Vli < Vre then
    begin
      mi:=(Vli+Vre) DIV 2;
      mergeSort(Vli,mi,liste);
      mergeSort(mi+1,Vre,liste);
      mergeIt(Vli,mi,Vre,liste);
    end;
end;

ints ist deklariert als
[delphi]ints: array[0..999999] of integer;

und aufgerufen wird die ganze chose mit
[delphi]mergeSort(0,length(ints)-1,ints);[/quote]


Das Array ist mit Zufallszahlen gefüllt.




Das läuft zwar alles und sortiert auch korrekt ... nur braucht der länger als Quicksort, ca. 3x solang. Und dies oltle glaube ich nicht der Fall sin, gel?
Wo liegt der Fehler?


Vielen Dank schonmal im Voraus!

Malte
Malte
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#2

Re: problem mit MergeSort-Code -- zu langsam

  Alt 21. Mai 2005, 14:06
vielleicht am SetLength da dus öfter aufrufst aufgrund von rekursion kanns langsam werden
  Mit Zitat antworten Zitat
Benutzerbild von Totti
Totti

Registriert seit: 1. Dez 2004
Ort: Harrislee
59 Beiträge
 
Delphi 2005 Personal
 
#3

Re: problem mit MergeSort-Code -- zu langsam

  Alt 21. Mai 2005, 14:08
Da dann ein festdefiniertes array nutzen?
Das muss ja theoretisch so groß sein, wie das zu sortierende Array,
praktisch die Hälfte ... hmm ... mal testen.


Edit:
Hm, dan überStacked der gleich,
weil er verstndlicherweise irre viele Arrays von ner riesigen Menge reservieren muss
Malte
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#4

Re: problem mit MergeSort-Code -- zu langsam

  Alt 21. Mai 2005, 14:44
nromaler weise brauchste für nen mergesort nur 3 arrays
2 wo du die daten aufteils und 1 wo se wieder zursammengeschrieben werden
  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:18 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