归并排序

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define maxn 1010
using namespace std;
void merge(int sr[],int tr[],int i,int m,int n)
{
/* 将有序的sr[i..m]和sr[m+1..n]归并为有序的tr[i..n] */
    int j,k,l;
    for(j=m+1,k=i;i<=m&&j<=n;k++)/* 将sr中记录由小到大地并入tr */
    {
        if(sr[i]<sr[j])
            tr[k]=sr[i++];
        else tr[k]=sr[j++];
    }
    if(i<=m)
    {
        for(l=0;l<=m-i;l++)
            tr[k+l]=sr[i+l];/* 将剩余的sr[i..m]复制到tr */
    }
    if(j<=n)
    {
        for(l=0;l<=n-j;l++)
            tr[k+l]=sr[j+l];/* 将剩余的sr[j..n]复制到tr */
    }
}
void msort(int sr[],int tr1[],int s,int t)
{/* 将sr[s..t]归并排序为tr1[s..t] */
    int m;
    int tr2[maxn];
    if(s==t)
       tr1[s]=sr[s];
    else
    {
        m = (s+t)/2;/* 将sr[s..t]平分为sr[s..m]和sr[m+1..t] */
        msort(sr,tr2,s,m);/* 递归地将sr[s..m]归并为有序的tr2[s..m] */
        msort(sr,tr2,m+1,t);/* 递归地将sr[m+1..t]归并为有序的tr2[m+1..t] */
        merge(tr2,tr1,s,m,t);/* 将tr2[s..m]和tr2[m+1..t]归并到tr1[s..t] */
    }
}
int main()
{
    int n;
    cin >> n;
    int a[n];
    memset(a,0,sizeof(a));
    for(int i=1;i<=n;i++)
        cin >> a[i];
    msort(a,a,1,n);
    for(int i=1;i<=n;i++)
        cout << a[i] << endl;
    return 0;
}
/*过程图见大话数据结构408-412*/
彼时当年少,莫负好时光。
原文地址:https://www.cnblogs.com/l609929321/p/6582265.html