Janilabo

Janilabo | TSAQuickSort() [Simba]

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