Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure TSAShellSort(var TSA: TStringArray; order: (so_LowToHigh, so_HighToLow));
- var
- x, a, b, l: Integer;
- tmp: string;
- begin
- l := Length(TSA);
- if (l > 1) then
- begin
- x := 0;
- while (x < (l div 3)) do
- x := ((x * 3) + 1);
- case order of
- so_HighToLow:
- while (x >= 1) do
- begin
- for a := x to (l - 1) do
- begin
- b := a;
- while ((b >= x) and (TSA[b] > TSA[(b - x)])) do
- begin
- tmp := TSA[b];
- TSA[b] := TSA[(b - x)];
- TSA[(b - x)] := tmp;
- b := (b - x);
- end;
- end;
- x := (x div 3);
- end;
- so_LowToHigh:
- while (x >= 1) do
- begin
- for a := x to (l - 1) do
- begin
- b := a;
- while ((b >= x) and (TSA[b] < TSA[(b - x)])) do
- begin
- tmp := TSA[b];
- TSA[b] := TSA[(b - x)];
- TSA[(b - x)] := tmp;
- b := (b - x);
- end;
- end;
- x := (x div 3);
- end;
- end;
- end;
- end;
- var
- TSA: TStringArray;
- begin
- TSA := ['Apple', 'Orange', 'Lemon', 'Banana', 'Pear'];
- TSAShellSort(TSA, so_HighToLow); // Reversed.
- WriteLn(ToStr(TSA));
- TSAShellSort(TSA, so_LowToHigh); // Default.
- WriteLn(ToStr(TSA));
- end.
Advertisement
Add Comment
Please, Sign In to add comment