合并排序的粗化

时间:2019-10-20 04:52:14

标签: algorithm mergesort clrs

我刚刚开始CLRS。第二章的第一个问题涉及当子数组达到指定的最小大小时,通过使用插入排序来粗化合并排序算法。我已经编写了修改后的代码,我认为它是正确的,因为我已经在一些输入和 coarseness 的不同值上进行了检查。对于某些隐秘的案例,我不太确定。 谁能告诉我是否可以进一步即兴创作。 这是修改后的合并排序过程(以theta表示的运行时间为(nk + nlg(n / k)):

void mergesort(int arr[], int p, int r, int k) { // k is the coarseness
    int q = (p + r) / 2;

    if (r - p + 1 > k) { // when the size of the subarray is atmost k, sort using insertion sort
    mergesort(arr, p, q, k);
    mergesort(arr, q + 1, r, k);

        merge(arr, p, q, r); // merge is the standard procedure

    }
    else {
        insort(arr, p, r); // insort is the standard insertion sort procedure
    }

}

此外,问题的第3部分询问该过程的运行时间与标准mergesort算法相同的k的最大值。我试图将两个过程的theta表示法等价(nk + nlg(n / k)= nlgn),但是可以做到吗?这样做是否有效,因为我没有得到一个明智的答案。任何帮助将不胜感激。谢谢。

0 个答案:

没有答案