算法流程:
①将数组[1,n]排序问题分解为[1,n/2]和[n/2+1,n]排序问题。
②递归解决子问题得到两个有序的子数组。
③将两个有序子数组合并为一个有序数组。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n;
void merge(int a[],int left,int mid,int right)
{
int i=left,j=mid+1,k=0;
int b[100];
for(int m=0;m<n;m++)
{
b[m]=a[m];
}
//memcpy(b, a, sizeof(b));
while(i<=mid&&j<=right)
{
if(b[i]<=b[j])
{
a[k+left]=b[i];
k++;
i++;
}
else
{
a[k+left]=b[j];
k++;
j++;
}
}
while(i<=mid)
{
a[k+left]=b[i];
i++;
k++;
}
while(j<=right)
{
a[k+left]=b[j];
j&