Pagini recente » Cod sursa (job #2534753) | Cod sursa (job #1163323) | Cod sursa (job #2628798) | Cod sursa (job #2950065) | Cod sursa (job #508165)
Cod sursa(job #508165)
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <ctime>
using namespace std;
int a[500001];
int Partition(int st, int dr){
int p=rand()&(dr-st);
p+=st;
//int p = ( st + dr ) / 2;
swap(a[st],a[p]);
p=a[st];
int i, j;
i=st, j=dr;
while(i<j){
if ( a[i]>p ){
swap(a[i],a[j]);
j--;
}
else ++ i;
}
if (a[i]>p){
--j, -- i;
}
swap(a[st],a[i]);
return i;
}
void quick(int l, int r){
if(r - l > 0){
int q = Partition(l, r);
quick(l, q-1);
quick(q+1, r);
}
}
int main(){
srand(time(NULL));
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int i = 0, n;
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
quick(0, n-1);
for(i = 0; i < n; i++)
printf( "%d ", a [ i ] );
printf ( "\n" );
return 0;
}