Advertisement
Guest User

Untitled

a guest
Nov 19th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.82 KB | None | 0 0
  1. procedure Merge(InArray, OutArray: T1DArray; const LToSortArray, L2ToSortArray, RToSortArray, R2ToSortArray: Integer;
  2.    var LB, RB, Dest: Integer);
  3. var
  4.    i, j, k: Integer;
  5.    Temp: T1DArray;
  6. begin
  7.    SetLength(Temp, RToSortArray - R2ToSortArray + L2ToSortArray - LToSortArray + 2);
  8.    i := LToSortArray;
  9.    j := RToSortArray;
  10.    k := 0;
  11.    if R2ToSortArray = L2ToSortArray then
  12.    begin
  13.    SetLength(Temp, RToSortArray - LToSortArray + 1);
  14.       for i := LToSortArray to RToSortArray do
  15.       begin
  16.         Temp[k]:=InArray[i];
  17.         Inc(k);
  18.       end
  19.    end
  20.    else
  21.    begin
  22.       while (i <= L2ToSortArray) and (j >= R2ToSortArray) do
  23.       begin
  24.          if (InArray[i] < InArray[j]) then
  25.          begin
  26.             Temp[k] := InArray[i];
  27.             Inc(k);
  28.             Inc(i);
  29.          end
  30.          else
  31.          begin
  32.             Temp[k] := InArray[j];
  33.             Inc(k);
  34.             Dec(j);
  35.          end;
  36.       end;
  37.  
  38.       while (j >= R2ToSortArray) do
  39.       begin
  40.          Temp[k] := InArray[j];
  41.          Inc(k);
  42.          Dec(j);
  43.       end;
  44.  
  45.       while (i <= L2ToSortArray) do
  46.       begin
  47.          Temp[k] := InArray[i];
  48.          Inc(k);
  49.          Inc(i);
  50.       end;
  51.    end;
  52.    if Dest = 1 then
  53.    begin
  54.       k := 0;
  55.       while (k < Length(Temp)) do
  56.       begin
  57.          OutArray[LB] := Temp[k];
  58.          Inc(LB);
  59.          Inc(k);
  60.       end;
  61.    end
  62.    else
  63.    begin
  64.       k := 0;
  65.       while (k < Length(Temp)) do
  66.       begin
  67.          OutArray[RB] := Temp[k];
  68.          Dec(RB);
  69.          Inc(k);
  70.       end;
  71.    end;
  72.  
  73. end;
  74.  
  75. procedure NaturalMergeSortWithDemo(A, B: T1DArray; LToSortArray, RToSortArray, LNewArray, RNewArray, DestMode: Integer;
  76.    LastView: String);
  77. var
  78.    M, L2ToSortArray, R2ToSortArray: Integer;
  79.    NewView: String;
  80.    Clear: T1DArray;
  81. begin
  82.      SetLength(B, Length(A));
  83.    if LToSortArray <= RToSortArray then
  84.    begin
  85.       L2ToSortArray := LToSortArray;
  86.       repeat
  87.          Inc(L2ToSortArray);
  88.       until (L2ToSortArray > RToSortArray) or (A[L2ToSortArray] < A[L2ToSortArray - 1]);
  89.       Dec(L2ToSortArray);
  90.       R2ToSortArray := RToSortArray;
  91.       repeat
  92.          Dec(R2ToSortArray);
  93.       until (R2ToSortArray < LToSortArray) or (A[R2ToSortArray] < A[R2ToSortArray + 1]) or (R2ToSortArray=L2ToSortArray);
  94.       Inc(R2ToSortArray);
  95.       if not (L2ToSortArray = Length(A) - 1) and not(R2ToSortArray = Length(A) - 1)  then
  96.       begin
  97.       Merge(A, B, LToSortArray, L2ToSortArray, RToSortArray, R2ToSortArray, LNewArray, RNewArray, DestMode);
  98.       DestMode := -DestMode;
  99.       NaturalMergeSortWithDemo(A, B,  L2ToSortArray + 1, R2ToSortArray - 1, LNewArray, RNewArray, DestMode, NewView);
  100.       SetLength(Clear, Length(A));
  101.       NaturalMergeSortWithDemo(B, Clear, 0, Length(A) - 1, 0, Length(A) - 1, 1, '');
  102.       A:=B;
  103.       end;
  104.    end;
  105. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement