Не получается преобразовать массив определенным образом

Нужно преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1, а потом — все остальные.

Алгоритм понял,но в коде реализовать не получается,пробовал примерно так:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int n, k = 0;
    cout << "n="; cin >> n;
    double* a = new double[n];

    cout << "Enter "<< n <<" elements:\n";
    for (int i = 0; i < n; i++)
        cin >> a[i];
    cout << endl;

    for (int i = 0; i < n; i++)
        if (fabs(a[i]) <= 1)
        {
            for (int j = i; j > k; j--)
                swap(a[j], a[j - 1]);
            k++;
        }

    for (int i = 0; i < n; i++)
        cout << a[i] << " ";
    cout << endl;

    delete[]a;
    system("pause");
    return 0;
}

Ответы (1 шт):

Автор решения: Mikhailo
int main() {
    int n = 0;
    cout << "n=";
    cin >> n;
    double* a = new double[n];
    cout << "Enter " << n << " elements:\n";

    for (int i = 0; i < n; i++)
        cin >> a[i];

    cout << endl;
    partition(a, a + n, [](double b) {
        return fabs(b) <= 1;
        });

    for (int i = 0; i < n; i++)
        cout << a[i] << " ";

    cout << endl;
    delete[]a;
    }
→ Ссылка