Janilabo

Janilabo | TSAShellSort() [Simba]

May 21st, 2013
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.30 KB | None | 0 0
  1. procedure TSAShellSort(var TSA: TStringArray; order: (so_LowToHigh, so_HighToLow));
  2. var
  3.   x, a, b, l: Integer;
  4.   tmp: string;
  5. begin
  6.   l := Length(TSA);
  7.   if (l > 1) then
  8.   begin
  9.     x := 0;
  10.     while (x < (l div 3)) do
  11.       x := ((x * 3) + 1);
  12.     case order of
  13.       so_HighToLow:
  14.       while (x >= 1) do
  15.       begin
  16.         for a := x to (l - 1) do
  17.         begin
  18.           b := a;
  19.           while ((b >= x) and (TSA[b] > TSA[(b - x)])) do
  20.           begin
  21.             tmp := TSA[b];
  22.             TSA[b] := TSA[(b - x)];
  23.             TSA[(b - x)] := tmp;
  24.             b := (b - x);
  25.           end;
  26.         end;
  27.         x := (x div 3);
  28.       end;
  29.       so_LowToHigh:
  30.       while (x >= 1) do
  31.       begin
  32.         for a := x to (l - 1) do
  33.         begin
  34.           b := a;
  35.           while ((b >= x) and (TSA[b] < TSA[(b - x)])) do
  36.           begin
  37.             tmp := TSA[b];
  38.             TSA[b] := TSA[(b - x)];
  39.             TSA[(b - x)] := tmp;
  40.             b := (b - x);
  41.           end;
  42.         end;
  43.         x := (x div 3);
  44.       end;
  45.     end;
  46.   end;
  47. end;
  48.  
  49. var
  50.   TSA: TStringArray;
  51.  
  52. begin
  53.   TSA := ['Apple', 'Orange', 'Lemon', 'Banana', 'Pear'];
  54.   TSAShellSort(TSA, so_HighToLow); // Reversed.
  55.   WriteLn(ToStr(TSA));
  56.   TSAShellSort(TSA, so_LowToHigh); // Default.
  57.   WriteLn(ToStr(TSA));
  58. end.
Advertisement
Add Comment
Please, Sign In to add comment