void merge(int a[], int l, int r) {
if (r - l < 1) //区间长度小于1了
return;
int mid = (l + r) >> 1; //二分
merge(a, l, mid); //左半段
merge(a, mid + 1, r); //右半段
int i = l, j = mid + 1;
fir(k, l, r) if (j > r || i <= mid && a[i] <= a[j]) //将当前最小的放入备用数组.
b[k] = a[i++]; // a[i]被放入,要么是当前最小,要么就是另外一个数组已经空了
else b[k] = a[j++];
fir(k, l, r) a[k] = b[k];
}
。 啊吧啊吧,root我这没发完整答案!!!!!!!!!!!!!!!!!!!!!!!!!!!