Advertisement
Guest User

Untitled

a guest
Sep 7th, 2019
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.19 KB | None | 0 0
  1. procedure QuickSort(SortList: TPointerList; L, R: Integer;
  2.   SCompare: TListSortCompareFunc);
  3. var
  4.   I, J: Integer;
  5.   P, T: Pointer;
  6. begin
  7.   if L < R then
  8.   begin
  9.     repeat
  10.       if (R - L) = 1 then
  11.       begin
  12.         if SCompare(SortList[L], SortList[R]) > 0 then
  13.         begin
  14.           T := SortList[L];
  15.           SortList[L] := SortList[R];
  16.           SortList[R] := T;
  17.         end;
  18.         break;
  19.       end;
  20.       I := L;
  21.       J := R;
  22.       P := SortList[(L + R) shr 1];
  23.       repeat
  24.         while SCompare(SortList[I], P) < 0 do
  25.           Inc(I);
  26.         while SCompare(SortList[J], P) > 0 do
  27.           Dec(J);
  28.         if I <= J then
  29.         begin
  30.           if I <> J then
  31.           begin
  32.             T := SortList[I];
  33.             SortList[I] := SortList[J];
  34.             SortList[J] := T;
  35.           end;
  36.           Inc(I);
  37.           Dec(J);
  38.         end;
  39.       until I > J;
  40.       if (J - L) > (R - I) then
  41.       begin
  42.         if I < R then
  43.           QuickSort(SortList, I, R, SCompare);
  44.         R := J;
  45.       end
  46.       else
  47.       begin
  48.         if L < J then
  49.           QuickSort(SortList, L, J, SCompare);
  50.         L := I;
  51.       end;
  52.     until L >= R;
  53.   end;
  54. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement