归并函数中动态数组的归并排序
Mergesort dynamic array in merge function
如果我创建一个静态数组左和右(在合并函数)。但是当我动态地创建这些数组(在合并函数的注释内)时,它不起作用。我找不到问题。请帮助
using namespace std;
#include <iostream>
int *array;
void mergesort(int array[],int,int);
void merge(int array[],int,int,int);
int main()
{
int n, start, end;
cout<<"Enter the no. of elements: ";
cin>>n;
// int *array;
array = new int(n);
for(int i=0;i<n;i++)
cin>>array[i];
start = 0;
end = n - 1;
mergesort(array,0,n-1);
for(int j=0;j<n;j++)
cout<<array[j];
return 0;
}
void mergesort(int array[],int start,int end)
{
int mid;
if(start < end)
{
mid = (start + end) /2;
mergesort(array,start,mid);
mergesort(array,mid+1,end);
merge(array,start,mid,end);
}
}
void merge(int array[],int start,int mid,int end)
{
int i,j;
int n1 = mid - start + 1;
int n2 = end - mid;
int left[20];
int right[20];
//int *left;
//int *right;
//left = new int(n1);
//right = new int(n2);
for(i = 0;i < n1;i++)
left[i] = array[start + i];
for(j = 0;j < n2;j++)
right[j] = array[mid + j + 1];
left[i] = 32767;
right[j] = 32767;
i = 0;
j = 0;
for(int m = start;m <= end;m++)
{
if(left[i] <= right[j])
{
array[m] = left[i];
i++;
}
else
{
array[m] = right[j];
j++;
}
}
}
几个错误:
-
分配数组的正确方法是:
left = new int[n1];
而不是你现在做的
left = new int(n1);
-
数组大小不正确。您将
n1+1
项放在left
中,将n2+1
项放在right
中(包括最终的32767
值),但分别只分配n1
和n2
元素。 -
确保释放在
delete[] left
和delete[] right
最后分配的内存
相关文章:
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 合并排序不排序自创建数组类 c++
- 带有枚举方向/类型的气泡排序结构数组
- 为什么指针在对二维数组进行排序时无法正常工作?
- 排序并行数组
- 如何在数组 c++ 中对字符串进行排序
- 为什么在此排序算法实现中,向量明显比数组慢?
- 如何对不在数组中的变量进行排序?
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 按字母顺序对结构内数组变量中的名称进行排序
- 使用排序函数 c++ 对字符数组进行排序
- 使用 std::sort 对二维 c 数组进行排序
- c++中的数组和归并排序
- 归并函数中动态数组的归并排序
- 数组中的反转次数.使用归并排序
- 归并排序递归不清楚数组的排序是如何实现的,请帮助理解代码