Как вывести чётные, а затем нечётные элементы массива в одну строку?

#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Russian");

    int arr[10];

    cout << "Введите элементы массива через пробел: ";

    for (int i = 0; i < 10; i++) // цикл для считывания чисел
        cin >> arr[i];
    cout << "arr = {";

    for (int i = 0; i < 10; i++) // цикл для вывода элементов массива
        cout << arr[i] << " ";  // выводим элементы массива на стандартное устройство вывода
    cout << "}\n " << endl;

    for (int i = 0; i < 10; i++) //цикл для нахождения чётности числа
    {     
        if (arr[i] % 2 == 0)
        {          
            cout << arr[i] << "- Чётное число \n";
        }

        if (arr[i] % 2 != 0)
        {
            cout << arr[i] << "- Нечётное число \n";
        }
    }

    system("pause");
    return 0;
}

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

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

Например...

№ 1. Выполнить два прохода, сначала четные, потом нечетные.

int main(int argc, const char * argv[])
{
    int arr[20];
    for(int i = 0; i < 20; ++i) arr[i] = rand()%100;

    for(int i = 0; i < 20; ++i) if (arr[i]%2 == 0) cout << arr[i] << " ";
    for(int i = 0; i < 20; ++i) if (arr[i]%2 == 1) cout << arr[i] << " ";

    cout << endl;
}

№ 2. partition или stable_partition

int main(int argc, const char * argv[])
{
    int arr[20];
    for(int i = 0; i < 20; ++i) arr[i] = rand()%100;

    stable_partition(arr,arr+20,[](int a) { return a%2==0; });

    for(int i = 0; i < 20; ++i) cout << arr[i] << " ";

    cout << endl;
}

№ 3. Отсортировать с соответствующим компаратором и вывести.

int main(int argc, const char * argv[])
{
    int arr[20];
    for(int i = 0; i < 20; ++i) arr[i] = rand()%100;

    sort(arr,arr+20,[](int a, int b) { return a%2==0 && b%2; });

    for(int i = 0; i < 20; ++i) cout << arr[i] << " ";

    cout << endl;
}

Можно и еще сложнее и медленнее, но стоит ли? :)

→ Ссылка