问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
/*
function : 对数组进行归并排序
param nums : 要排序的数组引用
return : ---
*/
void MergeSort(vector<int>&nums)
{
int n = nums.size(); //数组长度n
int k;
int *B = new int[n];
//初始子文件长度为1
k = 1;
while(k < n)
{
//将nums中的子文件经过一趟归并储存到数组B中
OnePassMerge(B, &nums, k, n);
//归并后子文件长度增加一倍
k <<= 1;
if(k >= n)
{
//已归并排序完毕,但结果在临时数组B中
//调用标准函数memcpy()将其复制到nums中
memcpy(&nums, B, n * sizeof(int));
}
else
{
//将B中的子文件经过一趟归并存储到数组nums中
OnePassMerge(&nums, B, k, n);
//归并后子文件长度增加一倍
k <<= 1;
}
}
//释放临时数组占用的内存空间
delete []B;
}
void OnePassMerge(int Dst[], int Src[], int Len, int n)
{
int i;
for(i = 0; i < n - 2 * Len; i += 2 * Len)
{
//执行两两归并,将Src中长度为Len的子文件归并成长度为2*Len的子文件,结果存放在Dst中
TwoWayMerge(Dst, Src, i, i + Len - 1, i + 2 * Len - 1);
}
if(i < n - Len)
{
//尾部至多还有两个子文件
TwoWayMerge(Dst, Src, i, i + Len - 1, n - 1);
}
else
{
//尾部至多还有一个子文件,直接复制到Dst中
memcpy(&Dst[i], &Src[i], (n - i) * sizeof(int));
}
}
运行结果及报错内容
"std::vector<int, std::allocator> *" 类型的实参与 "int *" 类型的形参不兼容