Возможно, не самое эффективное решение
#include lt;iostreamgt;
#include lt;cstdlibgt;
#include lt;ctimegt;
int main()
{
using namespace std;
const int N = 10;
int A[N];
srand(time(0));
for (int i = 0; i lt; N; ++i)
A[i] = rand() 201 - 100;
//Вывод исходного массива на экран
for (int i = 0; i lt; N; ++i)
cout lt;lt; A[i] lt;lt; " ";
cout lt;lt; endl;
//Подсчитаем количества положительных и отрицательных
int kpos = 0, kneg = 0;
for (int i = 0; i lt; N; i++)
if (A[i] gt; 0)
++kpos;
else
++kneg;
int * Apos = new int[kpos];
int * Aneg = new int[kneg];
int pos = 0, neg = 0;
for (int i = 0; i lt; N; ++i)
if (A[i] gt; 0)
Apos[pos++] = A[i];
else
Aneg[neg++] = A[i];
for (int i = 0; i lt; N; ++i)
if (i lt; kpos)
A[i] = Apos[i];
else
A[i] = Aneg[i - kpos];
delete[] Apos;
delete[] Aneg;
//Вывод полученного массива на экран
for (int i = 0; i lt; N; ++i)
cout lt;lt; A[i] lt;lt; " ";
cout lt;lt; endl;
return 0;
}