AGB  ·  Datenschutz  ·  Impressum  







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

MergeSort Implementation, optimierungsbedraf?

Ein Thema von Jonas Shinaniganz · begonnen am 5. Mär 2012 · letzter Beitrag vom 11. Mär 2012
 
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#1

MergeSort Implementation, optimierungsbedraf?

  Alt 5. Mär 2012, 10:47
Huhu,

Ich habe mir mal die Mühe gemacht und "des lernes halber" einen Mergesort in Delphi umgesetzt.

Ziel war es eigentlich nur ein rekursives Verfahren zu erstellen.

Wenn man die Unit einbindet kann man mit MergeSort einen Array of Integer Sortieren. Dazu übergibt man einfach den Bereich, den man in dem Array Sortiert haben möchte. Wenn alles sortiert werden soll z.b.: MergeSort(0, High(IntArray), IntArray);

Jetzt würde Ich gerne wissen ob Ihr noch Optimierungsvorschläge habt.

Habe mich sehr ausführlich damit beschäftigt und würde auf diese Art gerne noch etwas dazulernen.

Delphi-Quellcode:
unit SortierAlgorithmen;


interface


type
  TIntArray = array of Integer;


procedure MergeSort(Start : Integer; Ende : Integer; IntArray : TIntArray);


implementation


procedure MergeSort(Start : Integer; Ende : Integer; IntArray : TIntArray);
var
  NewEnd : Integer;
  NewStart : Integer;
  StartGO : Integer;
  I : Integer;
  ArrayResult : TIntArray;
begin
  StartGO := Start;
  if (High(IntArray) > 0) then
  begin
    NewEnd := Start + ((Ende - Start) div 2);
    NewStart := NewEnd + 1;

    if (Start <> NewEnd) then
    begin
      MergeSort(Start, NewEnd, IntArray);
    end;

    if (NewStart <> Ende) then
    begin
      MergeSort(NewStart, Ende, IntArray);
    end;

    I := 0;
    SetLength(ArrayResult, 1);
    while (Start <= NewEnd) and (NewStart <= Ende) do
    begin
      if (IntArray[Start] > IntArray[NewStart]) then
      begin
        ArrayResult[I] := IntArray[NewStart];
        inc(NewStart);
      end
      else
      begin
        ArrayResult[I] := IntArray[Start];
        inc(Start);
      end;
      inc(I);
      SetLength(ArrayResult, High(ArrayResult) + 2);
    end;

    while (Start <= NewEnd) or (NewStart <= Ende) do
    begin
      if (Start <= NewEnd) then
      begin
        ArrayResult[I] := IntArray[Start];
        inc(Start);
      end
      else
      begin
        ArrayResult[I] := IntArray[NewStart];
        inc(NewStart);
      end;
      inc(I);
      SetLength(ArrayResult, High(ArrayResult) + 2);
    end;

    I := 0;
    for I := Low(ArrayResult) to High(ArrayResult) - 1 do
      IntArray[StartGO + I] := ArrayResult[I];
  end;
end;


end.
  Mit Zitat antworten Zitat
 


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 12: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