我目前有这个C代码问题,我对如何将参数放入其中感到困惑。
问)使用C代码完成下面显示的mergesort函数,你的函数必须迭代实现。您可以假设存在具有以下标头的合并函数并调用它(您不必编写合并函数)。
到目前为止,我得到了这个:
void merge(int arr[], int start, int mid, int end);
void mergesort(int arr[], int len)
{
// write code here
}
这是我进行一些研究的进展,发现进行合并排序的迭代方式实际上称为Bottom Up Merge Sort。:
void mergesort(int arr[], int len)
{
int windows;
for (windows = 1; windows < len; windows = 2* windows)
{
int i;
for (i = 0; i < len; i+ 2*windows)
{
// not sure what to pass for the remaining parameters.
merge(arr, i, ??, ??));
}
}
}
我所设想的是,每次从1,2,4,8,16等(根据youtube)将相邻元素与我们“假设”存在的合并函数相结合。有人可以向我解释我应该将剩余参数传递给合并函数吗?这假设我们已经编写了一个连续组合相邻元素(窗口)的合并函数。我知道这需要某种逻辑数学,但我在数学上很弱,巧合的是我现在正在使用微积分...
答案 0 :(得分:0)
假设您正在传递一个大小为2的数组,这应该可以工作:
void mergesort(int arr[], int len)
{
int windows;
for (windows = 1; windows < len; windows = 2* windows)
{
int i;
for (i = 0; i < len; i+ 2*windows)
{
// not sure what to pass for the remaining parameters.
merge(arr, i, i+windows, i+2*windows));
}
}
}