Janilabo

Janilabo | TSAQuickSort3W() [Simba]

May 21st, 2013
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.72 KB | None | 0 0
  1. procedure __TSA_HL_QS3W(var TSA: TStringArray; const L, H: Integer);
  2. var
  3.   ls, rs, p: Integer;
  4.   x, tmp: string;
  5. begin
  6.   if (L >= H) then
  7.     Exit;
  8.   x := TSA[L];
  9.   ls := L;
  10.   rs := H;
  11.   p := (L + 1);
  12.   while (p <= rs) do
  13.     if (TSA[p] > x) then
  14.     begin
  15.       tmp := TSA[ls];
  16.       TSA[ls] := TSA[p];
  17.       TSA[p] := tmp;
  18.       Inc(p);
  19.       Inc(ls);
  20.     end else
  21.     if (TSA[p] < x) then
  22.     begin
  23.       tmp := TSA[rs];
  24.       TSA[rs] := TSA[p];
  25.       TSA[p] := tmp;
  26.       Dec(rs);
  27.     end else
  28.       Inc(p);
  29.   __TSA_HL_QS3W(TSA, L, (ls - 1));
  30.   __TSA_HL_QS3W(TSA, (rs + 1), H);
  31. end;
  32.  
  33. procedure __TSA_LH_QS3W(var TSA: TStringArray; const L, H: Integer);
  34. var
  35.   ls, rs, p: Integer;
  36.   x, tmp: string;
  37. begin
  38.   if (L >= H) then
  39.     Exit;
  40.   x := TSA[L];
  41.   ls := L;
  42.   rs := H;
  43.   p := (L + 1);
  44.   while (p <= rs) do
  45.     if (TSA[p] < x) then
  46.     begin
  47.       tmp := TSA[ls];
  48.       TSA[ls] := TSA[p];
  49.       TSA[p] := tmp;
  50.       Inc(p);
  51.       Inc(ls);
  52.     end else
  53.     if (TSA[p] > x) then
  54.     begin
  55.       tmp := TSA[rs];
  56.       TSA[rs] := TSA[p];
  57.       TSA[p] := tmp;
  58.       Dec(rs);
  59.     end else
  60.       Inc(p);
  61.   __TSA_LH_QS3W(TSA, L, (ls - 1));
  62.   __TSA_LH_QS3W(TSA, (rs + 1), H);
  63. end;
  64.  
  65. procedure TSAQuickSort3W(var TSA: TStringArray; order: (so_LowToHigh, so_HighToLow));
  66. var
  67.   h: Integer;
  68. begin
  69.   h := High(TSA);
  70.   if (h > 0) then
  71.   case order of
  72.     so_LowToHigh: __TSA_LH_QS3W(TSA, 0, h);
  73.     so_HighToLow: __TSA_HL_QS3W(TSA, 0, h);
  74.   end;
  75. end;
  76.  
  77. var
  78.   TSA: TStringArray;
  79.  
  80. begin
  81.   TSA := ['Apple', 'Orange', 'Lemon', 'Banana', 'Pear'];
  82.   TSAQuickSort3W(TSA, so_HighToLow); // Reversed.
  83.   WriteLn(ToStr(TSA));
  84.   TSAQuickSort3W(TSA, so_LowToHigh); // Default.
  85.   WriteLn(ToStr(TSA));
  86. end.
Advertisement
Add Comment
Please, Sign In to add comment