delphi 归并排序类

delphi 归并排序类

要先声明

type
TIntArr=array of integer;
procedure Merge(var X, Y: array of integer; L, M, R: integer);
var
  I, J: integer;
begin
  I := L;
  J := M + 1;
  while (L <= M) and (J <= R) do
  begin
    if X[L] > X[J] then
    begin
      Y[I] := X[J];
      J := J + 1;
    end
    else
    begin
      Y[I] := X[L];
      L := L + 1;
    end;
    I := I + 1;
  end;
  while L <= M do
  begin
    Y[I] := X[L];
    I := I + 1;
    L := L + 1;
  end;
  while J <= R do
  begin
    Y[I] := X[J];
    I := I + 1;
    J := J + 1;
  end;
end;

procedure MergeSort(var X, Y: TIntArr);
var
  IntLength, IntLen, IntLen_m, I: integer;
  Tmp: TIntArr;
begin
  IntLength := high(X) + 1;
  IntLen := 1;

  while IntLen < IntLength do
  begin
    IntLen_m := IntLen;
    IntLen := IntLen * 2;
    I := 0;
    while I + IntLen < IntLength do
    begin
      Merge(X, Y, I, I + IntLen_m - 1, I + IntLen - 1);
      I := I + IntLen;
    end;
    if I + IntLen_m < IntLength then
    begin
      Merge(X, Y, I, I + IntLen_m - 1, IntLength - 1);
    end;

    Tmp := X;
    X := Y;
    Y := Tmp;
  end;
end;

猜你喜欢

转载自blog.csdn.net/fkzxf/article/details/105949845