Janilabo

Janilabo | TSAShellSort

Sep 7th, 2012
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.15 KB | None | 0 0
  1. procedure TSAShellSort(var TSA: TStringArray; order: (tso_HighToLow, tso_LowToHigh));
  2. var
  3.   x, a, b, l: Integer;
  4. begin
  5.   l := Length(TSA);
  6.   x := 0;
  7.   while (x < (l div 3)) do
  8.     x := ((x * 3) + 1);
  9.   case order of
  10.     tso_HighToLow:
  11.       while (x >= 1) do
  12.       begin
  13.         for a := x to (l - 1) do
  14.         begin
  15.           b := a;
  16.           while ((b >= x) and (TSA[b] > TSA[(b - x)])) do
  17.           begin
  18.             Swap(TSA[b], TSA[(b - x)]);
  19.             DecEx(b, x);
  20.           end;
  21.         end;
  22.         x := (x div 3);
  23.       end;
  24.     tso_LowToHigh:
  25.       while (x >= 1) do
  26.       begin
  27.         for a := x to (l - 1) do
  28.         begin
  29.           b := a;
  30.           while ((b >= x) and (TSA[b] < TSA[(b - x)])) do
  31.           begin
  32.             Swap(TSA[b], TSA[(b - x)]);
  33.             DecEx(b, x);
  34.           end;
  35.         end;
  36.         x := (x div 3);
  37.       end;
  38.   end;
  39. end;
  40.  
  41. var
  42.   TSA: TStringArray;
  43.  
  44. begin
  45.   TSA := ['Toby', 'Richard', 'Nina', 'Joann', 'Matt', 'Jani', 'Ann'];  
  46.   WriteLn('TSA before sorting: ' + ToStr(TSA));
  47.   TSAShellSort(TSA, tso_LowToHigh);
  48.   WriteLn('TSA after sorting: ' + ToStr(TSA));
  49.   SetLength(TSA, 0);
  50. end.
Advertisement
Add Comment
Please, Sign In to add comment