【发布时间】:2018-03-08 08:55:20
【问题描述】:
我正在尝试将一个数组划分为两个区域 S1 和 S2。枢轴必须是数组的第一个元素。所以,例如:
7 5 9 2 6
7 是支点。
我想要 S1 区域;小于枢轴的数字
S2 区域;大于枢轴的数字。
像这样:
5 2 6 7 9
如何用 C++ 语言实现这个?
【问题讨论】:
我正在尝试将一个数组划分为两个区域 S1 和 S2。枢轴必须是数组的第一个元素。所以,例如:
7 5 9 2 6
7 是支点。
我想要 S1 区域;小于枢轴的数字
S2 区域;大于枢轴的数字。
像这样:
5 2 6 7 9
如何用 C++ 语言实现这个?
【问题讨论】:
你可以使用std::stable_partition
#include <iostream>
#include <algorithm>
#include <vector>
int main()
{
std::vector<int> v{7,5,9,2,6};
std::stable_partition(v.begin(), v.end(), [x=v[0]](int n){return n<x;});
for (int n : v) {
std::cout << n << ' ';
}
std::cout << '\n';
}
输出
5 2 6 7 9
【讨论】: