Pagini recente » Cod sursa (job #1765965) | Cod sursa (job #186544) | Cod sursa (job #1134594) | Cod sursa (job #1009097) | Cod sursa (job #1071720)
#include<iostream>
#include<ctime>
#include<cstdlib>
#include<vector>
#include<fstream>
#define maxn 500005
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
void qsort ( int a[] , int st , int dr ){
if ( st >= dr ) return ;
vector<int>smaller,bigger;
int pozPivot = st + rand() % (dr-st+1),add = 0;
for ( int i = st ; i <= dr ; ++i ){
if ( a[i] <= a[pozPivot]-add ){
smaller.push_back(a[i]);
if ( a[i] == a[pozPivot] ) add = 1;
}
else{
bigger.push_back(a[i]);
}
}
int p = st;
for ( int i = 0 ; i < (int)smaller.size() ; ++i ){
a[p++] = smaller[i];
}
for ( int i = 0 ; i < (int)bigger.size() ; ++i ){
a[p++] = bigger[i];
}
qsort(a,st,st+(int)smaller.size()-1);
qsort(a,st+(int)smaller.size(),dr);
}
int a[maxn];
int main () {
srand(time(NULL));
int n;
f >> n;
for ( int i = 1 ; i <= n ; ++i ){
f >> a[i];
}
qsort(a,1,n);
for ( int i = 1 ; i <= n ; ++i ){
g << a[i] << " ";
}
g << "\n";
return 0;
}