Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure __TSA_LH_M(var TSA, tmp: TStringArray; const Lo, Hi: Integer);
- var
- L, R, i, m: Integer;
- begin
- if (Lo >= Hi) then
- Exit;
- m := (Lo + (Hi - Lo) div 2);
- __TSA_LH_M(TSA, tmp, Lo, m);
- __TSA_LH_M(TSA, tmp, (m + 1), Hi);
- L := Lo;
- R := (m + 1);
- for i := Lo to Hi do
- tmp[i] := TSA[i];
- for i := Lo to Hi do
- if (L > m) then
- begin
- TSA[i] := tmp[R];
- Inc(R);
- end else
- if (R > Hi) then
- begin
- TSA[i] := tmp[L];
- Inc(L);
- end else
- if (tmp[R] < tmp[L]) then
- begin
- TSA[i] := tmp[R];
- Inc(R);
- end else
- begin
- TSA[i] := tmp[L];
- Inc(L);
- end;
- end;
- procedure __TSA_HL_M(var TSA, tmp: TStringArray; const Lo, Hi: Integer);
- var
- L, R, i, m: Integer;
- begin
- if (Lo >= Hi) then
- Exit;
- m := (Lo + (Hi - Lo) div 2);
- __TSA_HL_M(TSA, tmp, Lo, m);
- __TSA_HL_M(TSA, tmp, (m + 1), Hi);
- L := Lo;
- R := (m + 1);
- for i := Lo to Hi do
- tmp[i] := TSA[i];
- for i := Lo to Hi do
- if (L > m) then
- begin
- TSA[i] := tmp[R];
- Inc(R);
- end else
- if (R > Hi) then
- begin
- TSA[i] := tmp[L];
- Inc(L);
- end else
- if (tmp[R] > tmp[L]) then
- begin
- TSA[i] := tmp[R];
- Inc(R);
- end else
- begin
- TSA[i] := tmp[L];
- Inc(L);
- end;
- end;
- procedure TSAMergeSort(var TSA: TStringArray; order: (so_LowToHigh, so_HighToLow));
- var
- l: Integer;
- t: TStringArray;
- begin
- l := Length(TSA);
- if (l > 1) then
- begin
- SetLength(t, l);
- case order of
- so_LowToHigh: __TSA_LH_M(TSA, t, 0, (l - 1));
- so_HighToLow: __TSA_HL_M(TSA, t, 0, (l - 1));
- end;
- end;
- end;
- var
- TSA: TStringArray;
- begin
- TSA := ['Apple', 'Orange', 'Lemon', 'Banana', 'Pear'];
- TSAMergeSort(TSA, so_HighToLow); // Reversed.
- WriteLn(ToStr(TSA));
- TSAMergeSort(TSA, so_LowToHigh); // Default.
- WriteLn(ToStr(TSA));
- end.
Advertisement
Add Comment
Please, Sign In to add comment