Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure Merge(InArray, OutArray: T1DArray; const LToSortArray, L2ToSortArray, RToSortArray, R2ToSortArray: Integer;
- var LB, RB, Dest: Integer);
- var
- i, j, k: Integer;
- Temp: T1DArray;
- begin
- SetLength(Temp, RToSortArray - R2ToSortArray + L2ToSortArray - LToSortArray + 2);
- i := LToSortArray;
- j := RToSortArray;
- k := 0;
- if R2ToSortArray = L2ToSortArray then
- begin
- SetLength(Temp, RToSortArray - LToSortArray + 1);
- for i := LToSortArray to RToSortArray do
- begin
- Temp[k]:=InArray[i];
- Inc(k);
- end
- end
- else
- begin
- while (i <= L2ToSortArray) and (j >= R2ToSortArray) do
- begin
- if (InArray[i] < InArray[j]) then
- begin
- Temp[k] := InArray[i];
- Inc(k);
- Inc(i);
- end
- else
- begin
- Temp[k] := InArray[j];
- Inc(k);
- Dec(j);
- end;
- end;
- while (j >= R2ToSortArray) do
- begin
- Temp[k] := InArray[j];
- Inc(k);
- Dec(j);
- end;
- while (i <= L2ToSortArray) do
- begin
- Temp[k] := InArray[i];
- Inc(k);
- Inc(i);
- end;
- end;
- if Dest = 1 then
- begin
- k := 0;
- while (k < Length(Temp)) do
- begin
- OutArray[LB] := Temp[k];
- Inc(LB);
- Inc(k);
- end;
- end
- else
- begin
- k := 0;
- while (k < Length(Temp)) do
- begin
- OutArray[RB] := Temp[k];
- Dec(RB);
- Inc(k);
- end;
- end;
- end;
- procedure NaturalMergeSortWithDemo(A, B: T1DArray; LToSortArray, RToSortArray, LNewArray, RNewArray, DestMode: Integer;
- LastView: String);
- var
- M, L2ToSortArray, R2ToSortArray: Integer;
- NewView: String;
- Clear: T1DArray;
- begin
- SetLength(B, Length(A));
- if LToSortArray <= RToSortArray then
- begin
- L2ToSortArray := LToSortArray;
- repeat
- Inc(L2ToSortArray);
- until (L2ToSortArray > RToSortArray) or (A[L2ToSortArray] < A[L2ToSortArray - 1]);
- Dec(L2ToSortArray);
- R2ToSortArray := RToSortArray;
- repeat
- Dec(R2ToSortArray);
- until (R2ToSortArray < LToSortArray) or (A[R2ToSortArray] < A[R2ToSortArray + 1]) or (R2ToSortArray=L2ToSortArray);
- Inc(R2ToSortArray);
- if not (L2ToSortArray = Length(A) - 1) and not(R2ToSortArray = Length(A) - 1) then
- begin
- Merge(A, B, LToSortArray, L2ToSortArray, RToSortArray, R2ToSortArray, LNewArray, RNewArray, DestMode);
- DestMode := -DestMode;
- NaturalMergeSortWithDemo(A, B, L2ToSortArray + 1, R2ToSortArray - 1, LNewArray, RNewArray, DestMode, NewView);
- SetLength(Clear, Length(A));
- NaturalMergeSortWithDemo(B, Clear, 0, Length(A) - 1, 0, Length(A) - 1, 1, '');
- A:=B;
- end;
- end;
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement