Pagini recente » Cod sursa (job #1054707) | Cod sursa (job #1056522) | Cod sursa (job #3256971) | Cod sursa (job #1061741) | Cod sursa (job #2952036)
int v[100001];
void quicksort(int a[], int st, int dr ){
if( st >= dr )
return ;
int piv = ( rand() % (dr-st+1) ) + st ;
swap( a[piv] , a[dr] );
int freeuse = st;
for( int i = st ; i < dr ; i++ ){
if( a[i] < a[dr] )
swap( a[freeuse++] , a[i] );
}
swap( a[dr] , a[freeuse]);
quicksort( a , st , freeuse - 1 );
quicksort( a , freeuse + 1, dr);
}
#include <iostream>
#define NMAX 100000
using namespace std;
int v[NMAX+1],copie[NMAX+1];
void interclasare(int st1, int dr1, int st2, int dr2){
int x=0;
int st=st1;
while ( st1 <= dr1 && st2 <= dr2 ) {
if ( v[st1] < v[st2] ) {
copie[x] = v[st1];
st1++;
} else {
copie[x] = v[st2];
st2++;
}
x++;
}
while ( st1 <= dr1 ) {
copie[x] = v[st1];
st1++;
x++;
}
while ( st2 <= dr2 ) {
copie[x] = v[st2];
st2++;
x++;
}
for( int i = 0 ; i < x ; i++ )
v[st+i]=copie[i];
}
void mergesort(int v[], int st, int dr){
if( st == dr)
return ;
int mij=(st + dr)/2;
mergesort( v , st , mij );
mergesort( v , mij + 1 , dr );
interclasare( st , mij , mij +1 , dr );
}
int main()
{
int n, i;
cin >> n ;
for( i = 1 ; i <= n ; i++ )
cin >> v[i];
mergesort( v , 1 , n );
for( i = 1 ; i <= n ; i++ )
cout<<v[i]<<" ";
return 0;
}