Четные и нечетные элементы в массиве на С++
Есть такая задачка, я написал код в котором элементы спадают и идут по возрастанию. Нужно чтобы в тех что спадают были только нечетные, а в росте - четные.
С помощью генератора случайных чисел сформировать массив из 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 и по факту результата применять сортировку по убыванию или возрастанию на четных и нечетных индексах, соотв.