Pagini recente » Cod sursa (job #1247392) | Cod sursa (job #227814) | Cod sursa (job #1776967) | Cod sursa (job #246051) | Cod sursa (job #1071746)
#include<iostream>
#include<ctime>
#include<cstdlib>
#include<vector>
#include<fstream>
#include<stdio.h>
#define maxn 500005
using namespace std;
FILE*f=fopen("algsort.in","r");
FILE*g=fopen("algsort.out","w");
int smaller[maxn],bigger[maxn];
void qsort ( int a[] , int st , int dr ){
if ( st >= dr ) return ;
smaller[0] = bigger[0] = 0;
int pozPivot = st + rand() % (dr-st+1),same = 1;
for ( int i = st ; i <= dr ; ++i ){
if ( a[i] <= a[pozPivot] ){
smaller[++smaller[0]] = a[i];
if ( a[i] != a[pozPivot] ) same = 0;
}
else{
bigger[++bigger[0]] = a[i];
}
}
if ( same ) return ;
int p = st;
for ( int i = 1 ; i <= smaller[0] ; ++i ){
a[p++] = smaller[i];
}
for ( int i = 1 ; i <= bigger[0] ; ++i ){
a[p++] = bigger[i];
}
int sz = smaller[0];
qsort(a,st,st+sz-1);
qsort(a,st+sz,dr);
}
int a[maxn];
int main () {
srand(time(NULL));
int n;
fscanf(f,"%d",&n);
for ( int i = 1 ; i <= n ; ++i ){
fscanf(f,"%d",&a[i]);
}
qsort(a,1,n);
for ( int i = 1 ; i <= n ; ++i ){
fprintf(g,"%d ",a[i]);
}
fprintf(g,"\n");
return 0;
}