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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值