首页 > 解决方案 > 有没有办法按段对向量进行排序?

问题描述

如果我有一个包含奇数个元素的向量并且想要分段对向量进行排序,我如何构建一个循环来执行此操作但不会访问任何超出范围的内容?

像这样的数组:( [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);
}

标签: c++

解决方案


只需获取小于或等于数组大小的第一个偶数,然后将其用作循环的停止条件。

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 

推荐阅读