1. 思想

2. 代码
using namespace std
const int N = 1e6+10
int m[N], tmp[N]
int n
void merge_sort(int a[], int l, int r){
if(l >= r)
return
//取分界点mid
int mid = (l+r)/2
//递归排序左右两段
merge_sort(a, l, mid)
merge_sort(a, mid+1, r)
//合二为一,即归并
int k=0, i=l, j=mid+1
while(i<=mid && j<=r){
if(a[i]<=a[j])
tmp[k++] = a[i++]
else
tmp[k++] = a[j++]
}
while(i<=mid)
tmp[k++] = a[i++]
while(j<=r)
tmp[k++] = a[j++]
for(int i=l, j=0
a[i++] = tmp[j++]
}
int main(){
cin >> n
for(int i=0
cin >> m[i]
merge_sort(m, 0, n-1)
for(int i=0
cout << m[i] << ' '
return 0
}
3. 调试

4. 模板
int tmp[100010]
void merge_sort(int m[], int l, int r){
if(l>=r)
return
int mid = (l+r)/2
merge_sort(m, l, mid), merge_sort(m, mid+1, r)
int k=0, i=l, j=mid+1
while(i<=mid && j<=r){
if(m[i] < m[j])
tmp[k++] = m[i++]
else
tmp[k++] = m[j++]
}
while(i<=mid)
tmp[k ++] = m[i ++]
while(j<=r)
tmp[k ++] = m[j ++]
for(int i=l, j=0
m[i++] = tmp[j++]
}