Einzelnen Beitrag anzeigen

Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
721 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Integer Array sortieren

  Alt 14. Mär 2019, 01:47
TArray.Sort<Integer>(arr); {1}
funktioniert und ist über 10 Mal schneller als mit "eigenem Comparer" ({2} {3}).

Der oben vorgeschlagene Comparer Result := a-b; {2} funktioniert nicht für alle möglichen Array-Werte; zum Beispiel nicht für den Array mit den zwei Elementen maxint, -maxint.

Der Comparer {3} sortiert korrekt, ist aber wie {2} über 10 Mal langsamer als {1}.


Delphi-Quellcode:
uses
  System.Generics.Collections, { TArray }
  System.Generics.Defaults; { TComparer<T> }

...


var arr, brr : TArray<integer>;

...

{1}
  TArray.Sort<Integer>(arr);

{2} // sortiert nicht korrekt
  TArray.Sort<Integer>(brr, TComparer<Integer>.Construct(
  function (const A, B: integer): Integer
  begin
    Result := a-b;
  end));

{3}
    TArray.Sort<Integer>(brr, TComparer<Integer>.Construct(
  function (const A, B: integer): Integer
  begin
    if a < b then Result := -1
    else
    if a = b then Result := 0
    else Result := 1;
  end));
Michael Gasser
  Mit Zitat antworten Zitat