Проблемы с программой для сортировки чисел

Появилась проблема. Мне нужно написать программу, в которой пользователь задает 4 числа, после чего эти 4 числа сортируются. Первыми должны быть написаны не четные по возростанию, а потом четные по уменьшению. Вот так пытался сделать это я

#include <cmath>
#include <iostream>

using namespace std;

int func(int x,int y,int z,int k);

int main(int argc, char *argv[]){
    QCoreApplication a(argc, argv);
    int key = 1;
    while (key == 1){
        int a1, b, c, d;
        cout << "\n Developer: 123456\n";
        cout << "\n Enter a, b, c, d number: \n";
        cin >> a1 >> b >> c >> d;
        int x,y,z,k;
        func(x,y,z,k);
        cout << "\nEnter 1 for repeat, else 0";
        cin >> key;
    }

    return a.exec();
}

int func(int x,int y,int z,int k){
    int a1,b,c,d;
    x=a1%2;
    y=b%2;
    z=c%2;
    k=d%2;
    if (x==0){
        if (y==0){
            if (z==0){
                if (k==0){
                    if (b<c) swap (b,c);
                    if (a1<b) swap (a1,b);
                    if (c<d) swap (c,d);
                    cout << "\n" << a1 << b << c << d;
                }
                else {
                    if (b<c) swap (b,c);
                    if (a1<b) swap (a1,b);
                    cout << "\n" << d << a1 << b << c;
                }
            }
            else if (k==0){
                if (a1<b) swap (a1,b);
                if (b<d) swap (b,d);
                cout << "\n" << c << a1 << b << d;
            }
            else {
                if (a1<b) swap (a1,b);
                if (c>d) swap (c,d);
                cout << "\n" << c << d << a1 << b;
            }
        }
        else if (z==0){
            if (k==0){
                if (a1<c) swap (a1,c);
                if (c<d) swap (c,d);
                cout << "\n" << b << a1 << c << d;
            }
            else {
                if (a1<c) swap (a1,c);
                if (b>d) swap (b,d);
                cout << "\n" << b << d << a1 << c;
            }
        }
        else if (k==0){
            if (a1<d) swap (a1,d);
            if (b>c) swap (b,c);
            cout << "\n" << b << c << a1 << d;
        }
        else {
            if (b>c) swap (b,c);
            if (c>d) swap (c,d);
            cout << "\n" << b << c << d << a1;
        }
    }
    else if (y==0){
        if (z==0){
            if (k==0){
                if (b<c) swap (b,c);
                if (c<d) swap (c,d);
                cout << "\n" << a1 << b << c << d;
            }
            else {
                if (a1>d) swap (a1,d);
                if (b<c) swap (b,c);
                cout << "\n" << a1 << d << b << c;
            }
        }
        else if (k==0){
            if (a1>c) swap (a1,c);
            if (b>d) swap (b,d);
            cout << "\n" << a1 << c << b << d;
        }
        else {
            if (a1>c) swap (a1,c);
            if (c>d) swap (c,d);
            cout << "\n" << a1 << c << d << b;
        }
    }
    else if (z==0){
        if (k==0){
            if(c<d) swap (c,d);
            if (a1>b) swap (a1,b);
            cout << "\n" << a1 << b << c << d;
        }
        else {
            if (a1>b) swap (a1,b);
            if (b>d) swap (b,d);
            cout << "\n" << a1 << b << d << c;
        }
    }
    else if (k==0){
        if (a1>b) swap (a1,b);
        if (b>c) swap (b,c);
        cout << "\n" << a1 << b << c << d;
    }
    else {
        if (a1>b) swap (a1,b);
        if (b>c) swap (b,c);
        if (c>d) swap (c,d);
        cout << "\n" << a1 << b << c << d;
    }
}

По итогу в консоли выводится какой-то набор цифр, которые я не задавал переменным.


Спасибо за помощь. Нашел ошибки


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

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

кажется этот вопрос вы уже задавали или не вы :)

если используется c++, то почему бы не воспользоваться функцией сортировки std::sort?

а в качестве алгоритма сортировки (a, b) выбрать следующий:

  1. если a чётное, а b нечётное - то false

  2. если a нечётное, а b чётное - то true

  3. если a и b имеют одинаковую чётность, то сравнить a < b

алгоритм задать в функции std::sort через лямбда-функцию

[](const int a, const int b) {
    // алгоритм
}
→ Ссылка
Автор решения: shisui

Вроде бы работает нормально, кому нужно, то пользуйтесь

#include <cmath>
#include <iostream>

using namespace std;

int func(int x,int y,int z,int k);
int coef(int &a1,int &b,int &c, int &d);

int main(int argc, char *argv[]){
    QCoreApplication a(argc, argv);
    int key = 1;
    while (key == 1){
        cout << "\n Developer: shisui\n";
        int x,y,z,k;
        func(x,y,z,k);
        cout << "\nEnter 1 for repeat, else 0";
        cin >> key;
    }

    return a.exec();
}

int func(int x,int y,int z,int k){
    int a1,b,c,d;
    coef(a1,b,c,d);
    x=a1%2;
    y=b%2;
    z=c%2;
    k=d%2;
    if (x==0){
        if (y==0){
            if (z==0){
                if (k==0){
                    if (a1<b) swap (a1,b);
                    if (b<c) swap (b,c);
                    if (c<d) swap (c,d);
                    cout << a1 << ' ' << b << ' ' << c << ' ' << d << endl;
                }
                else {
                    if (a1<b) swap (a1,b);
                    if (b<c) swap (b,c);
                    cout << d << ' ' << a1 << ' ' << b << ' ' << c << endl;
                }
            }
            else if (k==0){
                if (a1<b) swap (a1,b);
                if (b<d) swap (b,d);
                cout << c << ' ' << a1 << ' ' << b << ' ' << d << endl;
            }
            else {
                if (a1<b) swap (a1,b);
                if (c>d) swap (c,d);
                cout << c << ' ' << d << ' ' << a1 << ' ' << b << endl;
            }
        }
        else if (z==0){
            if (k==0){
                if (a1<c) swap (a1,c);
                if (c<d) swap (c,d);
                cout << b << ' ' << a1 << ' ' << c << ' ' << d << endl;
            }
            else {
                if (a1<c) swap (a1,c);
                if (b>d) swap (b,d);
                cout << b << ' ' << d << ' ' << a1 << ' ' << c << endl;
            }
        }
        else if (k==0){
            if (a1<d) swap (a1,d);
            if (b>c) swap (b,c);
            cout << b << ' ' << c << ' ' << a1 << ' ' << d << endl;
        }
        else {
            if (b>c) swap (b,c);
            if (c>d) swap (c,d);
            cout << b << ' ' << c << ' ' << d << ' ' << a1 << endl;
        }
    }
    else if (y==0){
        if (z==0){
            if (k==0){
                if (b<c) swap (b,c);
                if (c<d) swap (c,d);
                cout << a1 << ' ' << b << ' ' << c << ' ' << d << endl;
            }
            else {
                if (a1>d) swap (a1,d);
                if (b<c) swap (b,c);
                cout << a1 << ' ' << d << ' ' << b << ' ' << c << endl;
            }
        }
        else if (k==0){
            if (a1>c) swap (a1,c);
            if (b>d) swap (b,d);
            cout << a1 << ' ' << c << ' ' << b << ' ' << d << endl;
        }
        else {
            if (a1>c) swap (a1,c);
            if (c>d) swap (c,d);
            cout << a1 << ' ' << c << ' ' << d << ' ' << b << endl;
        }
    }
    else if (z==0){
        if (k==0){
            if(c<d) swap (c,d);
            if (a1>b) swap (a1,b);
            cout << a1 << ' ' << b << ' ' << c << ' ' << d << endl;
        }
        else {
            if (a1>b) swap (a1,b);
            if (b>d) swap (b,d);
            cout << a1 << ' ' << b << ' ' << d << ' ' << c << endl;
        }
    }
    else if (k==0){
        if (a1>b) swap (a1,b);
        if (b>c) swap (b,c);
        cout << a1 << ' ' << b << ' ' << c << ' ' << d << endl;
    }
    else {
        if (a1>b) swap (a1,b);
        if (b>c) swap (b,c);
        if (c>d) swap (c,d);
        cout << a1 << ' ' << b << ' ' << c << ' ' << d << endl;
    }
}
int coef(int &a1,int &b,int &c, int &d){
    cout << "\n Enter a, b, c, d number: \n";
    cin >> a1 >> b >> c >> d;
}
→ Ссылка