Hallo,
so ähnlich denke ich auch. Aber warum die Daten unnütz hin und her schieben?
Delphi-Quellcode:
unit DemoTypes;
interface
uses
Types;
type
TAdresse =
record
Name:
String;
Vorname:
String;
Strasse:
String;
PLZ:
String;
Ort:
String;
end;
TAdressen =
array of TAdresse;
function IndexByName(
const a: TAdressen;
var index: Integer): TIntegerDynArray;
implementation
uses
SysUtils;
function MinIndex(
const a: TAdressen; ida: TIntegerDynArray; iLow, iHigh: Integer): Integer;
var
i: Integer;
begin
Result := iLow;
for i := Succ(iLow)
to iHigh
do
if CompareText(a[ida[i]].
Name, a[ida[Result]].
Name) < 0
then
Result := i;
end;
procedure SwapIndex(ida: TIntegerDynArray; i, j: Integer);
var
iTemp: Integer;
begin
if i <> j
then
begin
iTemp := ida[i];
ida[i] := ida[j];
ida[j] := iTemp;
end;
end;
function IndexByName(
const a: TAdressen;
var index: Integer): TIntegerDynArray;
var
i: Integer;
begin
SetLength(Result, Length(a));
for i := Low(a)
to High(a)
do
Result[i] := i;
for i := Low(Result)
to Pred(High(Result))
do
SwapIndex(Result, i, MinIndex(a, Result, i, High(Result)));
end;
end.
Wohlgemerkt - das ist der wenig effektive Algorithmus von Michael. Ich habe ihn lediglich ein klein wenig anders implementiert und ein dynamisches Array verwendet.
Grüße vom marabu