Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure QuickSort(SortList: TPointerList; L, R: Integer;
- SCompare: TListSortCompareFunc);
- var
- I, J: Integer;
- P, T: Pointer;
- begin
- if L < R then
- begin
- repeat
- if (R - L) = 1 then
- begin
- if SCompare(SortList[L], SortList[R]) > 0 then
- begin
- T := SortList[L];
- SortList[L] := SortList[R];
- SortList[R] := T;
- end;
- break;
- end;
- I := L;
- J := R;
- P := SortList[(L + R) shr 1];
- repeat
- while SCompare(SortList[I], P) < 0 do
- Inc(I);
- while SCompare(SortList[J], P) > 0 do
- Dec(J);
- if I <= J then
- begin
- if I <> J then
- begin
- T := SortList[I];
- SortList[I] := SortList[J];
- SortList[J] := T;
- end;
- Inc(I);
- Dec(J);
- end;
- until I > J;
- if (J - L) > (R - I) then
- begin
- if I < R then
- QuickSort(SortList, I, R, SCompare);
- R := J;
- end
- else
- begin
- if L < J then
- QuickSort(SortList, L, J, SCompare);
- L := I;
- end;
- until L >= R;
- end;
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement