Janilabo

Janilabo | TSAJnlbSort() [Simba]

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