有没有办法对向量进行分段排序
Is there a way to sort a vector in segments?
如果我有一个元素数量为奇数的向量,并且想对向量进行分段排序,我怎么能构造一个循环来执行此操作但不访问任何越界的东西?
就像这样的数组: [4, 5, 6, 3, 10, 2, 0]
(尺寸: 7(
我想按 2 个段排序,所以它变成这样: [4, 5, 3, 6, 2, 10, 0]
我在想这样的事情,但随后向量将访问超出界限的 arr[8]。
for(int i = 0; i < arr.size(); i = i + 2) {
sort(arr.begin() + i, arr.begin() + i - 1);
}
两个选项浮现在脑海中:
首先,您可以约束循环:
const int SegmentLen = 2;
for (int i=0; i+SegmentLen-1 < arr.size(); i += SegmentLen)
std::sort(arr.begin()+i, arr.begin()+i+SegmentLen);
其次,您可以循环固定次数:
auto segments = arr.size() / SegmentLen;
for (int i=0; i < segments; ++i)
std::sort(arr.begin() + (i*SegmentLen), arr.begin() + (i*SegmentLen) + SegmentLen);
//Handle any leftovers
只需获取小于或等于数组大小的第一个偶数,然后将其用作循环的停止条件。
int main(){
std::array<int, 7> arr = {4, 5, 6, 3, 10, 2, 0};
auto size = arr.size() % 2 ? arr.size() - 1 : arr.size(); // if odd subtract one else use size
for (size_t i = 0; i < size - 2; i += 2)
std::sort(arr.begin() + i, arr.begin() + i + 2);
for (auto e : arr)
std::cout << e << " ";
}
输出:
4 5 3 6 10 2 0
相关文章:
- 仅在大型阵列上出现合并排序分段错误
- 分段 排序函数实现中的错误
- C++为什么我的指针选择排序中存在分段错误?
- 合并排序:分段错误核心转储
- 快速排序;分段错误,但找不到位置?
- 分段故障,合并排序算法
- 合并排序代码中的分段错误
- 家庭作业的排序链表程序中的分段错误
- 按姓氏合并排序结构,导致分段错误
- 有没有办法对向量进行分段排序
- 快速排序算法,一些特定输入序列的错误答案和分段错误
- 排序功能中的分段错误
- 分段错误:11 合并排序
- 简单插入排序中的分段错误
- std::list::使用自定义比较器排序时出现分段故障
- 分段故障:链接列表上的气泡排序
- 为什么我在快速排序时遇到分段错误
- 快速排序不起作用(分段错误)
- 合并排序程序中的分段错误
- 分段故障:SET C++11中的二次排序