排序正数和负数
这里有很多可行的解决方法,我们可以将正数和负数分离,然后将正数和负数依次交换。
原地址在这
https://www.geeksforgeeks.org/rearrange-positive-and-negative-numbers-publish/
void rearrange(std::vector<int>& arrs)
{
//负数在前 正数在后
int j = -1;
for (int i = 0; i < arrs.size(); ++i)
{
if (arrs[i] < 0)
{
++j;
cout << arrs[i] << " swap " << arrs[j] << endl;
std::swap(arrs[i], arrs[j]);
}
print(arrs);
}
print(arrs);
cout << "-------------------------" << endl;
//正数开头pos
int pos = j + 1;
int swappos = 0;
//条件:正数没到头 交换Index不能超过pos(否则剩下的都是无意义的交换)
while (pos < arrs.size() && swappos < pos && arrs[swappos] < 0)
{
cout << arrs[swappos] << " swap " << arrs[pos] << endl;
std::swap(arrs[swappos], arrs[pos]);
++pos;
swappos += 2;
print(arrs);
}
print(arrs);
}