Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure __TSA_LH_QS2(TSA: TStringArray; Lo, Hi: Integer);
- var
- L, R: Integer;
- C, T: string;
- begin
- repeat
- case ((Hi - Lo) > 16) of
- True:
- begin
- C := TSA[((Hi + Lo) shr 1)];
- L := Lo;
- R := Hi;
- repeat
- while (TSA[L] < C) do
- Inc(L);
- while (TSA[R] > C) do
- Dec(R);
- if (L <= R) then
- begin
- if (L <> R) then
- begin
- T := TSA[L];
- TSA[L] := TSA[R];
- TSA[R] := T;
- end;
- Inc(L);
- Dec(R);
- end;
- until (R < L);
- if (R > Lo) then
- __TSA_LH_QS2(TSA, Lo, R);
- Lo := L;
- end;
- False:
- begin
- for L := (Lo + 1) to Hi do
- begin
- T := TSA[L];
- R := L;
- while ((R > Lo) and (TSA[(R - 1)] > T)) do
- begin
- TSA[R] := TSA[(R - 1)];
- Dec(R);
- end;
- TSA[R] := T;
- end;
- Exit;
- end;
- end;
- until (Hi <= L);
- end;
- procedure __TSA_HL_QS2(TSA: TStringArray; Lo, Hi: Integer);
- var
- L, R: Integer;
- C, T: string;
- begin
- repeat
- case ((Hi - Lo) > 16) of
- True:
- begin
- C := TSA[((Hi + Lo) shr 1)];
- L := Lo;
- R := Hi;
- repeat
- while (TSA[L] > C) do
- Inc(L);
- while (TSA[R] < C) do
- Dec(R);
- if (L <= R) then
- begin
- if (L <> R) then
- begin
- T := TSA[L];
- TSA[L] := TSA[R];
- TSA[R] := T;
- end;
- Inc(L);
- Dec(R);
- end;
- until (R < L);
- if (R > Lo) then
- __TSA_HL_QS2(TSA, Lo, R);
- Lo := L;
- end;
- False:
- begin
- for L := (Lo + 1) to Hi do
- begin
- T := TSA[L];
- R := L;
- while ((R > Lo) and (TSA[(R - 1)] < T)) do
- begin
- TSA[R] := TSA[(R - 1)];
- Dec(R);
- end;
- TSA[R] := T;
- end;
- Exit;
- end;
- end;
- until (Hi <= L);
- end;
- procedure TSAQuickSort2(TSA: TStringArray; order: (so_LowToHigh, so_HighToLow));
- var
- h: Integer;
- begin
- h := High(TSA);
- if (h > 0) then
- case order of
- so_LowToHigh: __TSA_LH_QS2(TSA, 0, h);
- so_HighToLow: __TSA_HL_QS2(TSA, 0, h);
- end;
- end;
- var
- TSA: TStringArray;
- begin
- TSA := ['Apple', 'Orange', 'Lemon', 'Banana', 'Pear'];
- TSAQuickSort2(TSA, so_HighToLow); // Reversed.
- WriteLn(ToStr(TSA));
- TSAQuickSort2(TSA, so_LowToHigh); // Default.
- WriteLn(ToStr(TSA));
- end.
Advertisement
Add Comment
Please, Sign In to add comment