Wiskunde???? O, ja, dat bestaat ook nog
Je kunt het in Delphi vrij makkelijk zonder wiskunde doen:
Delphi Code:
uses System.Generics.Collections, System.Generics.Defaults;
// ...
TArray.Sort<Double>(mArr, TComparer<Double>.Construct(
function(const Left, Right: Double): Integer
begin
Result := TComparer<Double>.Default.Compare(Left, Right);
end));
// nu is mArr gesorteerd (echter wel van laag naar hoog)
(mArr is dan een array of double)
mArr wordt gesorteerd van laag naar hoog. Als je van hoog naar laag wilt moet je Left en Right even omdraaien in de TComparer.
TComparer<Double>.Default.Compare(Right, Left);
Als je perse met de QuickSort e.d. aan de gang wilt gaan kan dat natuurlijk ook:
Delphi Code:
procedure QSort(var A: array of Double);
procedure QuickSort(var A: array of Double; iLo, iHi: Integer);
var
Lo, Hi: Integer;
Mid, T: Double;
begin
Lo := iLo;
Hi := iHi;
Mid := A[(Lo + Hi) div 2];
repeat
while A[Lo] < Mid do
Inc(Lo);
while A[Hi] > Mid do
Dec(Hi);
if Lo <= Hi then
begin
T := A[Lo];
A[Lo] := A[Hi];
A[Hi] := T;
Inc(Lo);
Dec(Hi);
end;
until Lo > Hi;
if Hi > iLo then
QuickSort(A, iLo, Hi);
if Lo < iHi then
QuickSort(A, Lo, iHi);
end;
begin
QuickSort(A, Low(A), High(A));
end;
// ...
QSort(mArr);
// nu is mArr gesorteerd (echter wel van laag naar hoog)
Bookmarks