归并排序
#include<stdio.h>
#include<algorithm>
using namespace std;
#define BL for(int i=0;i<n;i++)
int n;
int a[10000], t[10000];
void Bsort(int a[], int L, int mid ,int R, int t[])
{
int Z = 0;
int aa = L;
int bb = mid + 1;
while (aa <= mid&&bb <= R)
{
if (a[aa] <= a[bb])
{
t[Z++] = a[aa++];
}
else
{
t[Z++] = a[bb++];
}
}while (aa <= mid)
{
t[Z++] = a[aa++];
}
while (bb <= R)
{
t[Z++] = a[bb++];
}
for (int i = 0; i < Z; i++)
{
a[i+L] = t[i];
}
}
void Msort(int a[], int L, int R, int t[])
{
if (L < R)
{
int mid;
mid = L + (R - L) / 2;
Msort(a, L, mid, t);
Msort(a, mid + 1, R, t);
Bsort(a, L, mid, R, t);
}
}
int main()
{
scanf_s("%d", &n);
BL
scanf_s("%d", &a[i]);
int L = 0;
int R = n - 1;
Msort(a, L, R, t);
BL
printf("%d ", a[i]);
}
动图演示递归法:
合并排序步骤图:
总体的步骤图: