Cod sursa(job #2422259)

Utilizator Rufus007Marincia Catalin Rufus007 Data 18 mai 2019 11:27:47
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include<fstream>

std::ifstream fin("algsort.in");
std::ofstream fout("algsort.out");


const int MAX = 500001;
int sir[MAX], N;

void reversing_array(int a[], int N) {
    for (int i = 0; i < N / 2; ++i)
        std::swap(a[i], a[N - i - 1]);
}

void quick_sorting(int a[], int st, int dr) {
    if (st < dr) {
        int m = st + (dr - st + 1) / 2;
        std::swap(a[st], a[m]);


        int i = st, j = dr, d = 0;

        while (i < j) {
            if (a[i] > a[j]) {
                std::swap(a[i], a[j]);
                d = 1 - d;
            }
            i += d;
            j = 1 - d;
        }
        quick_sorting(a, st, i - 1);
        quick_sorting(a, st + 1, dr);
    }
}

int main() {
    bool sor_cr = true, sor_des = true;
    int maxim, minim;
    fin >> N;
    for (int i = 0; i < N; ++i) {
        fin >> sir[i];
        if (i == 0) {
            maxim = minim = sir[i];
        } else {
            if (sor_cr) {
                if (maxim <= sir[i]) {
                    maxim = sir[i];
                } else { sor_cr = false; }
            }
            if (sor_des) {
                if (minim >= sir[i]) {
                    minim = sir[i];
                } else { sor_des = false; }
            }
        }
    }
    if (sor_des) {
        reversing_array(sir, N);
    } else if (!sor_cr) {
        quick_sorting(sir, 0, N - 1);
    }
    for(int i=0;i<N;++i)
        fout<<sir[i]<<' ';
    fin.close();
    fout.close();
    return 0;
}