1. 思想

2. 代码
#include<iostream>
using namespace std;
const int N = 1e6+10;
int m[N], tmp[N];
int n;
void merge_sort(int m[], int l, int r){
if(l >= r)
return;
//取分界点
int mid = l+r >> 1;
//递归排序左右两段
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; i<=r;)
m[i++] = tmp[j++];
}
int main(){
cin >> n;
for(int i=0; i<n; i++)
cin >> m[i];
merge_sort(m, 0, n-1);
for(int i=0; i<n; i++)
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; i<=r;)
m[i++] = tmp[j++];
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。