//必须把下面的代码放在下面,为了使最后能够处理原先整数组
unique_ptr<int[]> temp(new int[last+1]); //这里的last是实际下标,所以要加1
int f = first; //要把first保存一下,最后合并到原数组中时使用
int t = mid + 1;
int k = 0;
//直到有一部分全部比较完 注意:要包括最后一个元素
while (first <= mid && t <= last)
{
if (arr[first] < arr[t])
{
temp[k++] = arr[first++];
}
else
{
temp[k++] = arr[t++];
}
}
//把剩余部分的东西处理完成
if (first > mid) //这里其实可以省略掉if语句,直接写成两个while,但是为了代码的可读性,我们加上if语句
{
while (t <= last)
{
temp[k++] = arr[t++];
}
}
else
{
while (first <= mid)
{
temp[k++] = arr[first++];
}
}
//把比较完成的两部分合起来放在原数组中
for (int i = 0; i < k; i++)
{
arr[f + i] = temp[i];
}
};