【专题】归并排序

简介

归并排序是一种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.

猜你喜欢

转载自blog.csdn.net/cdy1206473601/article/details/74905585