我需要帮助来创建一个函数来在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
))
答案 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
)。