Janilabo

Janilabo | TSAHeapSort() [Simba]

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