Merge Sort C ++ 1 parameter-矢量图

时间:2019-02-12 19:38:32

标签: c++

我需要帮助来创建一个函数来在C ++中进行合并排序,但是我仅限于1个参数(向量)。我已经开始并创建了下面的代码,但是它没有正确排序。如果有人可以帮助我解决此问题,我将不胜感激。谢谢。

dat <- structure(list(Day = c("19-Jan", "19-Jan", "19-Jan", "19-Jan", 
"19-Jan", "19-Jan", "19-Jan", "19-Jan", "20-Jan", "21-Jan", "22-Jan", 
"23-Jan", "24-Jan", "25-Jan", "25-Jan", "25-Jan", "25-Jan"), 
    ID = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 
    2L, 2L, 2L, 2L), Reading = c(10L, 10L, 10L, 20L, 20L, 20L, 
    20L, 20L, 10L, 10L, 10L, 10L, 20L, 20L, 20L, 20L, 10L)), .Names = c("Day", 
"ID", "Reading"), class = "data.frame", row.names = c(NA, -17L
))

1 个答案:

答案 0 :(得分:2)

您正在递归地调用该函数,但是您不使用返回的值。在这里:

    mergeSort(left);
    mergeSort(right);
    merge(lst, left, right);

    return lst;

似乎您假设对mergeSort(left)的调用会修改left,但不会这样做(参数按值传递,即进行复制)。

我没有检查所有的低谷,因为这似乎是一种练习,所以我不想为您提供完整的解决方案,但是您需要遵循以下原则:

    auto sorted_left = mergeSort(left);
    auto sorted_right = mergeSort(right);
    auto sorted = merge(sorted_left, sorted_right);
    return sorted;

还要注意,这种实现方式效率极低(因为递归地创建向量的负载并按值传递它们)。即使这是一项练习,也算是很差的一项。似乎是在尝试教您不良做法。您应该传递迭代器或学习如何使用算法(尤其是std::sort)。