以合并排序确定侧阵列的大小
Deciding the size of the side array in merge sort
我正在尝试实现合并排序。我的代码有效
void merge( int * , int , int , int );
void mergeSort( int *arr , int low , int high){
if( low < high){
int mid = ( low + high )/2;
mergeSort( arr , 0 , mid );
mergeSort( arr , mid +1, high);
merge( arr , low , mid , high);
}
}
void merge( int *arr , int low , int mid , int high ){
int barr[ high ];
int i = low;
int j = mid + 1;
int index = low;
while( i <= mid && j <= high ){
if( arr[i] < arr[j] ){
barr[index++] = arr[i++];
}
else{
barr[index++] = arr[j++];
}
}
if( i < mid + 1 )
for( int x = i ; x < mid +1 ; x++)
barr[ index++ ] = arr[x];
if( j <= high )
for( int y = j ; y < high ; y ++)
barr[ index++ ] = arr[y];
for( int z = low ; z < index ; z++ ){
arr[z] = barr[z];
}
}
int main()
{
int arr[] = { 5 ,6 , 2, 6 ,7 , 5 ,8 ,9};
mergeSort(arr , 0 , 8 );
for( int i = 0; i < 8 ; i++){
cout << arr[i] << " ";
}
return 0;
}
我很难决定的是这条线
int barr[high];
如何有效地确定此侧阵列的大小?我以为高 - 低是足够的,但看起来还不够,当我创建尺寸1的arrary时,我会访问较大索引上的元素。有什么方法可以做出决定,或者我必须始终创建一个高元素的数组,从而导致大量内存消耗=我的代码无效。
谢谢
正如注释中指出的那样,VLA在C 中无效。至于您的问题,如果您想将一部分数组与low
到high
的索引合并,则需要high - low + 1
数组大小。
相关文章:
- OpenMP阵列性能较差
- 使用C++程序合并排序没有得到正确的输出
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 当我的阵列太大时出现分段错误
- 位阵列上的快速AND运算
- 用于合并排序的合并函数
- 在声明中合并两个常量"std::set"(不是在运行时)
- 如何将一个数组值合并为一个整数c++
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 阵列必须使用大括号封闭的初始器进行初始化
- 将向量的 N 段合并到位C++
- 没有从阵列<float>到阵列<int>的可行转换
- 在C++中合并两个库
- 仅在大型阵列上出现合并排序分段错误
- 如何在多个成员阵列上构建合并视图
- 使用Boost :: Join合并多个阵列
- 整数阵列合并排序比QuickSort快
- 以合并排序确定侧阵列的大小
- char阵列在C 并将其与其他合并
- 合并3组阵列