推荐一个网站 https://visualgo.net/zh 这个网站可以看到很多算法的动态演绎

大概就是这个亚子,可以自己去看归并排序
下边给出归并排序的代码
1 #include <bits/stdc++.h>
2 #define ll long long
3 using namespace std;
4
5 const int maxn=501000;
6 ll n,m,i,j,k,a[maxn],b[maxn],cnt;
7
8 void mergesort(ll a[],ll l,ll r)
9 {
10 if (r-l<1) return ;
11 ll mid=(l+r)>>1;
12 mergesort(a,l,mid);
13 mergesort(a,mid+1,r);
14 ll i=l,j=mid+1; // i是第一段序列的下标, j是第二段序列的下标
15 for (ll k=l;k<=r;k++){
16 if (j>r || (i<=mid && a[i]<=a[j])) // 判断第一段和第二段取出的数哪个更小,将其存入合并序列,并继续向下扫描
17 b[k]=a[i++];
18 else{
19 b[k]=a[j++];
20 }
21 }
22 for (ll k=l;k<=r;k++)
23 a[k]=b[k];
24 }
25
26 int main()
27 {
28 while(scanf("%lld",&n)&& n){
29 for (i=1;i<=n;i++)
30 scanf("%lld",&a[i]);
31 cnt=0;
32 mergesort(a,1,n);
33 for(int i=1;i<=n;i++)
34 printf("%d ",a[i]);
35 }
36 return 0;
37 }