#简介
归并排序是一种O(n log n)的排序方法,但是比快排要稳定一点,所以我们通常用它来解决更大数量的排序
#实际原理
其实,归并排序是用dfs来排序的
工作原理如下:
采用递归实现二分的方式排逐个排序,到最终dfs返回的时候完成排序。
var
a,r1:array[0..200000]of longint;
n,i:longint;
procedure dg(f,e:longint);
var
m,i,j,k:longint;
begin
if f=e then exit;
m:=(f+e) div 2;
dg(f,m);
dg(m+1,e);//递归实现二分
i:=f;
j:=m+1;
k:=f;
while (i<=m) and (j<=e) do
begin
if a[i]<a[j] then
begin
r1[k]:=a[i];
inc(i);
inc(k);
end
else
begin
r1[k]:=a[j];
inc(j);
inc(k);
end;
end;
while i<=m do
begin
r1[k]:=a[i];
inc(i);
inc(k);
end;
while j<=e do
begin
r1[k]:=a[j];
inc(j);
inc(k);
end;
for i:=f to e do a[i]:=r1[i];
end;
begin
readln(n);
for i:=1 to n do read(a[i]);
dg(1,n);
for i:=1 to n do writeln(a[i]);
end.