Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure __TSA_HL_QS3W(var TSA: TStringArray; const L, H: Integer);
- var
- ls, rs, p: Integer;
- x, tmp: string;
- begin
- if (L >= H) then
- Exit;
- x := TSA[L];
- ls := L;
- rs := H;
- p := (L + 1);
- while (p <= rs) do
- if (TSA[p] > x) then
- begin
- tmp := TSA[ls];
- TSA[ls] := TSA[p];
- TSA[p] := tmp;
- Inc(p);
- Inc(ls);
- end else
- if (TSA[p] < x) then
- begin
- tmp := TSA[rs];
- TSA[rs] := TSA[p];
- TSA[p] := tmp;
- Dec(rs);
- end else
- Inc(p);
- __TSA_HL_QS3W(TSA, L, (ls - 1));
- __TSA_HL_QS3W(TSA, (rs + 1), H);
- end;
- procedure __TSA_LH_QS3W(var TSA: TStringArray; const L, H: Integer);
- var
- ls, rs, p: Integer;
- x, tmp: string;
- begin
- if (L >= H) then
- Exit;
- x := TSA[L];
- ls := L;
- rs := H;
- p := (L + 1);
- while (p <= rs) do
- if (TSA[p] < x) then
- begin
- tmp := TSA[ls];
- TSA[ls] := TSA[p];
- TSA[p] := tmp;
- Inc(p);
- Inc(ls);
- end else
- if (TSA[p] > x) then
- begin
- tmp := TSA[rs];
- TSA[rs] := TSA[p];
- TSA[p] := tmp;
- Dec(rs);
- end else
- Inc(p);
- __TSA_LH_QS3W(TSA, L, (ls - 1));
- __TSA_LH_QS3W(TSA, (rs + 1), H);
- end;
- procedure TSAQuickSort3W(var 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_QS3W(TSA, 0, h);
- so_HighToLow: __TSA_HL_QS3W(TSA, 0, h);
- end;
- end;
- var
- TSA: TStringArray;
- begin
- TSA := ['Apple', 'Orange', 'Lemon', 'Banana', 'Pear'];
- TSAQuickSort3W(TSA, so_HighToLow); // Reversed.
- WriteLn(ToStr(TSA));
- TSAQuickSort3W(TSA, so_LowToHigh); // Default.
- WriteLn(ToStr(TSA));
- end.
Advertisement
Add Comment
Please, Sign In to add comment