Pagini recente » Cod sursa (job #1823947) | Cod sursa (job #1517556) | Cod sursa (job #697800) | Cod sursa (job #2321571) | Cod sursa (job #2422261)
#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 ) / 2+1;
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;
}