就地合并排序实际用法
In-place merge sort practical usage
我尝试在这里和那里搜索以找到确切的就地合并排序以及我需要在哪里使用它?但没有找到直接的答案。请在下面回答帮助我。
1) 何时何地需要就地合并?就地合并的实际用法。
2)如果就地合并的输入数组未排序会发生什么?
3)在合并排序,就地合并排序和快速排序中哪个占用更多内存?
注意:我问的是"std::inplace_merge",这是一个stl算法。
1)
当您想在 O(nlogn) 时间内对列表进行排序,同时使用比标准合并排序更少的空间时,使用就地合并排序。
2)排序的全部目的是使输入数组排序,因此未排序的输入数组将通过就地合并排序。
3) Mergesort 使用更多内存,因为它为两个递归调用创建了两个大小为一半的新数组。就地合并排序和快速排序应占用大约相同的空间,因为它们都是就地的。对于合并排序,in-place 表示 O(log n) 额外的空间,用于保留长度为 n 的数组的相关索引,而不是最严格的 O(1) 就地含义。在最坏的情况下,快速排序会占用 O(nlogn) 额外的空间,因为可能存在 O(n) 递归调用,每个递归调用都有占用空间 O(logn) 的指针。
希望这有帮助。
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 这个指针在c++中的用法
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 就地合并排序实际用法
- C++11 原子内存排序 - 这是宽松(释放-消耗)排序的正确用法吗?
- 如何在排序的向量上正确应用擦除-删除习惯用法