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;