* fixed bug in QuickSort_ItemList_CustomItemExchanger_Context and

QuickSort_ItemList_Context and which can cause wrong sort results, due to not
  taking into account that the pivot can be moved by the swap operation

git-svn-id: trunk@41191 -
This commit is contained in:
nickysn 2019-02-03 16:34:05 +00:00
parent 79b82acfcc
commit ea340b9481

View File

@ -183,9 +183,16 @@ var
Dec(J);
If I <= J then
begin
Move((Items + ItemSize*I)^, TempBuf^, ItemSize);
Move((Items + ItemSize*J)^, (Items + ItemSize*I)^, ItemSize);
Move(TempBuf^, (Items + ItemSize*J)^, ItemSize);
if I < J then
begin
Move((Items + ItemSize*I)^, TempBuf^, ItemSize);
Move((Items + ItemSize*J)^, (Items + ItemSize*I)^, ItemSize);
Move(TempBuf^, (Items + ItemSize*J)^, ItemSize);
if P = (Items + ItemSize*I) then
P := Items + ItemSize*J
else if P = (Items + ItemSize*J) then
P := Items + ItemSize*I;
end;
Inc(I);
Dec(J);
end;
@ -239,7 +246,14 @@ procedure QuickSort_ItemList_CustomItemExchanger_Context(
Dec(J);
If I <= J then
begin
Exchanger(Items + ItemSize*I, Items + ItemSize*J, Context);
if I < J then
begin
Exchanger(Items + ItemSize*I, Items + ItemSize*J, Context);
if P = (Items + ItemSize*I) then
P := Items + ItemSize*J
else if P = (Items + ItemSize*J) then
P := Items + ItemSize*I;
end;
Inc(I);
Dec(J);
end;