浅谈归并排序

#简介

归并排序是一种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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值