Pagini recente » Cod sursa (job #1453751) | Cod sursa (job #2478032) | Cod sursa (job #1771089) | Arhiva de probleme | Cod sursa (job #394530)
Cod sursa(job #394530)
#include<fstream>
#include<algorithm>
using namespace std;
int a[500009];
inline void swap(int& a, int& b){
int aux;
aux=a;a=b;b=aux;
}
int partitie(int st, int dr){
int p, pos, k, i;
p=rand();
p=p&(dr-st);
p=p+st;
k=a[p]; pos=st;
swap(a[pos], a[p]);
for(i=st+1;i<=dr;i++)
if(a[i]<k)
swap(a[++pos],a[i]);
swap(a[pos],a[st]);
return pos;
}
void sorteaza(int st, int dr){
int k;
int j, i;
for(i=st+1;i<=dr;i++){
j=i;
k=a[j];
while(j>0&&k<a[j-1])
a[j]=a[j-1],j--;
a[j]=k;
}
}
void quisort(int st, int dr, int l){
if(dr-st>64){
int m=partitie(st, dr);
quisort(st, m-1, l+1);
quisort(m+1, dr, l+1);
}
else sorteaza(st, dr);
}
int main(){
int n, i;
srand(time(NULL));
ifstream f("algsort.in");
ofstream g("algsort.out");
f>>n;
for(i=0;i<n;i++)
f>>a[i];
quisort(0, n-1, 0);
//sort(a, a+n);
for(i=0;i<n;i++)
g<<a[i]<<' ';
g<<'\n';
return 0;
}