C++合并排序内存问题
C++ Merge Sort memory problems
我正在尝试编写合并排序算法的实现。但是我不明白如何正确使用内存。这是我的代码:
void merge(vector<int>::iterator begin1, vector<int>::iterator end1,
vector<int>::iterator begin2, vector<int>::iterator end2,
vector<int>::iterator out) {
while (begin1 != end1) {
if (*begin1 <= * begin2 || begin2 == end2) {
*out++ = *begin1++;
} else {
*out++ = *begin2++;
}
}
while (begin1 < end1) {
*out++ = *begin1++;
}
while (begin2 < end2) {
*out++ = *begin2++;
}
}
void merge_sort(vector<int> &v) {
unsigned long n = v.size();
if (n == 1) {
return;
}
vector<int> v1;
v1.assign(v.begin(), v.begin() + n/2);
vector<int> v2;
v2.assign(v.begin() + n/2, v.end());
merge_sort(v1);
merge_sort(v2);
merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v.begin());
v1.clear();
v2.clear();
}
它可以工作,但它不能有效地使用内存。我该如何改进它?
STL 可以使用 std::inplace_merge 以低内存占用执行merge_sort,例如http://en.cppreference.com/w/cpp/algorithm/inplace_merge
下面是有关如何完成就地合并的高级说明:STL__merge_without_buffer算法?
相关文章:
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- 包含矢量指针的结构的内存释放问题
- 在函数中分配内存时出现问题
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- 释放内存(主题模板)时出现问题
- C++ 中 std::vector 的内存问题
- C++ DLL 堆内存分配问题
- 在我的以下代码中获取 MLE(内存限制错误).尝试解决 ROUND C 2019(问题 A-摆动行走)启动问题
- 字符 * 未从重载运算符或内存管理问题正确返回
- delete[]有问题,如何部分删除内存
- 内存泄漏问题
- 指向动态内存中结构中的变量时出现问题
- c++中的内存管理问题
- C++堆栈内存管理问题
- 为什么我的C 代码在Linux上运行,而在Windows上不运行,是否有RAM内存的问题
- JNA 参数问题:内存访问无效
- boost的问题::内存映射~500MB,外部USB文件