![]() |
#2
qq4727391192017-03-14 08:58
|

#ifndef _MERGESORT_H_
#define _MERGESORT_H_
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
template<typename 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[l + i];
int i = l, 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<typename T>
void __mergeSort(T *arr, int l, int 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<typename T>
void mergeSort(T *arr, int n)
{
__mergeSort(arr, 0, n - 1);
}
#endif //_MERGESORT_H_
在测试文件中已经将各函数值正确的调用,但是编译的时候,在__merge函数中,提示aux[]大小未知,说它的大小不是常量表达式。这是为什么呢?
我用的是VS2013。