mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 18:09:27 +02:00
* 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:
parent
79b82acfcc
commit
ea340b9481
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user