Четные и нечетные элементы в массиве на С++

Есть такая задачка, я написал код в котором элементы спадают и идут по возрастанию. Нужно чтобы в тех что спадают были только нечетные, а в росте - четные.

С помощью генератора случайных чисел сформировать массив из 20 элементов. Упорядочить элементы массива так, чтобы все элементы с четными номерами были упорядочены по росту, а с нечетными - по убыванию

#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

int main()
{
    const int n=21;
    int m[n];
    srand(time(0));
    cout<<"Massiv M:\n";
    for(int i=0;i<n;i++)
    {
        m[i]=rand();
        cout<<"m["<<i<<"]= "<<m[i]<<endl;
    }


    // Рост
    int temp;
    for(int i=0;i<n;i++)
    {
        for(int j=1;j<n-i;j++)
        {
            if(m[j]<m[j-1]) { temp=m[j]; m[j]=m[j-1]; m[j-1]=temp;}
        }
    }
    cout<<"Vporyadkovanyj massib po zrostanny:\n";
    for(int i=0;i<n;i++)
    {
        cout<<m[i]<<" ";
    }
    cout<<endl;

    // Убивание
    for(int i=0;i<n;i++)
    {
        for(int g=1;g<n-i;g++)
        {
            if(m[g]>m[g-1]) { temp=m[g]; m[g]=m[g-1]; m[g-1]=temp;}
        }
    }

    cout<<"Vporyadkovanyj massib po spad:\n";
    for(int i=0;i<n;i++)
    {
        cout<<m[i]<<" ";
    }
    return 0;
}

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

Автор решения: DSuhoi

Используем STL контейнер list, функции copy_if и sort из algorithm. Код:

    list<int> tmpN; //создаём список для сортировки

    copy_if(begin(m), end(m), back_inserter(tmpN), [](const int x){ return x%2; }); //нечётные числа

    tmpN.sort([](const int a, const int b){ return a > b; });   //по убыванию

    cout << "Нечётные числа (" << tmpN.size() << " - элементов): ";

    for(int i : tmpN)   //вывод
        cout << i << ' ';

    tmpN.clear();   //очистка списка

    copy_if(begin(m), end(m), back_inserter(tmpN), [](const int x){ return (x+1)%2; }); //чётные числа

    tmpN.sort([](const int a, const int b){ return a < b; });   //по возрастанию

    cout << "\nЧётные числа(" << tmpN.size() << " - элементов): ";

    for(int i : tmpN)   //вывод
        cout << i << ' ';
→ Ссылка
Автор решения: bigf00t

мне кажется, проще сделать проверку i%2 и по факту результата применять сортировку по убыванию или возрастанию на четных и нечетных индексах, соотв.

→ Ссылка