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