Pagini recente » Cod sursa (job #477133) | Cod sursa (job #464284) | Cod sursa (job #2748131) | Cod sursa (job #2405217) | Cod sursa (job #645448)
Cod sursa(job #645448)
#include<iostream>
#include<fstream>
using namespace std;
struct valoare {
int min,max,pozmin,pozmax;
};
valoare x;
int v[500001];
valoare divimp (int p, int q)
{
int m;
valoare a,b;
if(p==q) {
x.min=v[p];
x.max=v[p];
x.pozmin=p;
x.pozmax=p;
return x;
}
else {
m=(p+q)/2;
a=divimp(p,m);
b=divimp(m+1,q);
if(b.max>a.max) {
a.max=b.max;
a.pozmax=b.pozmax;
}
if(a.min>b.min) {
a.min=b.min;
a.pozmin=b.pozmin;
}
return a;
}
}
int main ()
{
int n,i,c,p,q;
ifstream f("algsort.in");
ofstream g("algsort.out");
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
f.close();
p=1;
q=n;
while(p<q) {
x=divimp(p,q);
c=v[p];
v[p]=x.min;
v[x.pozmin]=c;
if(v[x.pozmin]!=x.max) {
c=v[q];
v[q]=x.max;
v[x.pozmax]=c;
}
p++;
q--;
}
for(i=1;i<=n;i++)
g<<v[i]<<" ";
g.close();
return 0;
}