Pagini recente » Cod sursa (job #1462498) | Cod sursa (job #2396357) | Cod sursa (job #2645461) | Cod sursa (job #1492798) | Cod sursa (job #508025)
Cod sursa(job #508025)
#include<fstream>
#include<algorithm>
#include<ctime>
#include<cstdlib>
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, k, l, r;
p=rand(); p=p&(dr-st); p=p+st;
k=a[p]; l=st-1; r=dr;
swap(a[dr],a[p]);
for(;;){
while(a[++l]<k) ;
while(a[--r]>k) if(l==r) break;
if(l>=r) break;
swap(a[l],a[r]);
}
swap(a[l], a[dr]);
return l;
}
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>0){
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;
}