我应该在Bottom Up Merge Sort中将哪个参数传递给我的合并函数?

时间:2014-11-10 18:58:23

标签: c mergesort

我目前有这个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)将相邻元素与我们“假设”存在的合并函数相结合。有人可以向我解释我应该将剩余参数传递给合并函数吗?这假设我们已经编写了一个连续组合相邻元素(窗口)的合并函数。我知道这需要某种逻辑数学,但我在数学上很弱,巧合的是我现在正在使用微积分...

1 个答案:

答案 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)); 
        }
    }   
}