我按照你的程序写有问题
template<class T>
void __merge(T arr[], int L,int mid, int R)
{
T aux[R-L+1];
//创建临时空间
for (int i = L; i <= R; i++)
{
aux[i - L] = arr[i];
}
int i = L;
int j = mid + 1;
for (int k = L; k <= R; k++)
{
if (i > mid)
{
arr[k] = aux[j-L];
j++;
}
else if (j > R)
{
arr[k] = aux[i - L];
i++;
}
else if (aux[i - L] <= aux[j - L])
{
arr[k] = aux[i - L];
i++;
}
else
{
arr[k] = aux[j - L];
j++;
}
}
}
template<class T>
void __MergeSort(T arr[], int L, int R)//[L,R] R为最后一个元素的位置
{
if (L >= R)
return;
int mid = (L + R) / 2;
__MergeSort(arr, L, mid);
__MergeSort(arr, mid + 1, R);
__merge(arr, L, mid, R);
}
template<class T>
void MergeSort(T arr[], int n)
{
__MergeSort(arr, 0, n-1);
}
结果显示
可以帮我看看怎么回事吗?