我正在学习算法类,并试图在c ++中实现合并排序。我试图存储左右子阵列,但意识到我无法这样做,因为我无法在运行时初始化大小。有没有办法解决这个问题,还是我不正确地进行排序过程?我列出了下面的内容。
我也试图避免使用矢量,因为这太容易了。
void merge(int *arr, int left, int mid, int right)
{
int size1 = mid - left + 1;
int size2 = right - mid;
int leftArr[size1];
int rightArr[size2];
....
}
void mergeSort(int *arr, int left, int right)
{
if (left < right)
{
int mid = (left + right) / 2;
mergeSort(arr, mid+1, right);
mergeSort(arr, left, mid);
merge(arr, left, mid, right);
}
}
答案 0 :(得分:1)
从我的角度来看,使用vector
会更容易,这就是C ++。但是,如果您只是为了学习而这样做,那么您可以像建议的那样动态分配数组。
int *leftArr = new int[size1];
int *rightArr = new int[size2];
//do stuff
//don't forget to free your memory
delete [] leftArr;
delete [] rightArr;
答案 1 :(得分:0)
可变长度数组的技术等价物使用alloca从堆栈分配(名称可能不同),但不建议这样做,因为大数组会导致堆栈溢出。
int * leftArr = _alloca(size1*sizeof(int));
int * rightArr = _alloca(size2*sizeof(int));
按照user3886450的回答建议使用new和delete []。