合并排序 c++ 1 参数 - 向量
Merge Sort c++ 1 parameter - vector
我需要帮助创建一个函数来在C++中进行合并排序,但我仅限于 1 个参数,一个向量。我已经启动并创建了下面的代码,但它没有正确排序。如果有人能帮助我解决这个问题,我将不胜感激。谢谢。
template <class T>
vector<T> mergeSort(std::vector<T> lst){
if(lst.size() == 1){
return lst;
}
else{
int size = lst.size();
int low = floor(size/2);
int high = ceil(size/2);
vector<T> left(lst[0], lst[low]);
vector<T> right(lst[low], lst[size]);
mergeSort(left);
mergeSort(right);
merge(lst, left, right);
return lst;
}
}
template <class T>
vector<T> merge(vector<T>list, vector<T> left, vector<T> right){
auto l = left.begin();
auto r = right.begin();
auto a = list.begin();
while(l != left.end() && r != right.end()){
if(*r < *l){
*a = *r;
r++;
}
else{
*a = *l;
left++;
}
a++;
}
return list;
}
您正在递归调用函数,但不使用返回的值。这里:
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
(。
相关文章:
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- 标准::向量声明中使用的模板参数
- 使用 C++ 将命令行参数拆分为参数/向量
- 如何在 c++ 中定义接受不同参数类型的函数向量?
- 如何将向量中的可变参数转换为参数的持有者?
- C++向量默认为成员参数
- 使用向量初始化参数化构造函数的对象数组
- 有什么方法可以将具有不同模板参数的模板类实例放入向量中?
- OpenCL 是否支持向量作为内核参数?
- 使用并行参数向量调用元素向量的成员函数
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 将不同类型的模板参数包提取到双精度向量中会产生警告
- 如何从 node-ffi 调用 c++ 中以结构向量作为参数的方法?
- 将任意模板向量作为函数参数C++传递
- 为什么我们需要在优先级队列声明中添加一个向量作为参数?
- 如何使用非特异性类型制作向量参数
- C++ 类中的向量参数
- 采用向量参数的函数模板回文
- 将向量参数为空传递
- C++和python:向量参数的TypeError解析