You've already forked lazarus-ccr
LazStats: Add QuickSort routine.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7696 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -28,13 +28,15 @@ procedure Exchange(var a, b: String); overload;
|
|||||||
procedure SortOnX(X: DblDyneVec; Y: DblDyneVec = nil; Z: DblDyneVec = nil);
|
procedure SortOnX(X: DblDyneVec; Y: DblDyneVec = nil; Z: DblDyneVec = nil);
|
||||||
procedure SortOnX(X: DblDyneVec; Y: DblDyneMat);
|
procedure SortOnX(X: DblDyneVec; Y: DblDyneMat);
|
||||||
|
|
||||||
|
procedure QuickSortOnX(X: DblDyneVec; Y: DblDyneVec = nil; Z: DblDyneVec = nil);
|
||||||
|
|
||||||
function IndexOfString(L: StrDyneVec; s: String): Integer;
|
function IndexOfString(L: StrDyneVec; s: String): Integer;
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses
|
uses
|
||||||
ToolWin;
|
Math, ToolWin;
|
||||||
|
|
||||||
// https://stackoverflow.com/questions/4093595/create-ttoolbutton-runtime
|
// https://stackoverflow.com/questions/4093595/create-ttoolbutton-runtime
|
||||||
procedure AddButtonToToolbar(AToolButton: TToolButton; AToolBar: TToolBar);
|
procedure AddButtonToToolbar(AToolButton: TToolButton; AToolBar: TToolBar);
|
||||||
@ -179,6 +181,50 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure QuickSortOnX(X: DblDyneVec; Y: DblDyneVec = nil; Z: DblDyneVec = nil);
|
||||||
|
|
||||||
|
procedure DoQuickSort(L, R: Integer);
|
||||||
|
var
|
||||||
|
I,J: Integer;
|
||||||
|
P: Integer;
|
||||||
|
begin
|
||||||
|
repeat
|
||||||
|
I := L;
|
||||||
|
J := R;
|
||||||
|
P := (L+R) div 2;
|
||||||
|
repeat
|
||||||
|
while CompareValue(X[P], X[I]) > 0 do inc(I);
|
||||||
|
while CompareValue(X[P], X[J]) < 0 do dec(J);
|
||||||
|
if I <= J then begin
|
||||||
|
if I <> J then begin
|
||||||
|
Exchange(X[I], X[J]);
|
||||||
|
if Y <> nil then
|
||||||
|
Exchange(Y[I], Y[J]);
|
||||||
|
if Z <> nil then
|
||||||
|
Exchange(Z[I], Z[J]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
if P = I then
|
||||||
|
P := J
|
||||||
|
else if P = J then
|
||||||
|
P := I;
|
||||||
|
|
||||||
|
inc(I);
|
||||||
|
dec(J);
|
||||||
|
end;
|
||||||
|
until I > J;
|
||||||
|
|
||||||
|
if L < J then
|
||||||
|
DoQuickSort(L, J);
|
||||||
|
|
||||||
|
L := I;
|
||||||
|
until I >= R;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
DoQuickSort(0, High(X));
|
||||||
|
end;
|
||||||
|
|
||||||
function IndexOfString(L: StrDyneVec; s: String): Integer;
|
function IndexOfString(L: StrDyneVec; s: String): Integer;
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
|
Reference in New Issue
Block a user