Pagini recente » Cod sursa (job #2757380) | Cod sursa (job #2160996) | Cod sursa (job #2786900) | Cod sursa (job #3211609) | Cod sursa (job #1411767)
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <cstdio>
using namespace std ;
int v[100005] ;
// prototip qsort de mana
/*
void q_sort (int inf , int sup )
{
register int x , i , j , t ;
i = inf ;
j = sup ;
x = v[(i+j)/2] ;
do
{
while ( ( i < sup ) && ( v[i] < x ) )
++i ;
while ( ( j > inf ) && ( v[j] > x ) )
--j ;
if (i <= j )
{
t = v[i] ;
v[i] = v[j] ;
v[j] = t ;
++i , --j ;
}
} while ( i <= j ) ;
if ( inf < j )
q_sort( inf , j ) ;
if ( i < sup )
q_sort( i , sup ) ;
}
*/
/*
int compare ( const void * a , const void * b )
{
return ( *(int*)a - *(int*)b );
}
*/
int random_partition(int* arr, int start, int end)
{
srand(time(NULL));
int pivotIdx = start + rand() % (end-start+1);
int pivot = arr[pivotIdx];
swap(arr[pivotIdx], arr[end]); // move pivot element to the end
pivotIdx = end;
int i = start -1;
for(int j=start; j<=end-1; j++)
{
if(arr[j] <= pivot)
{
i = i+1;
swap(arr[i], arr[j]);
}
}
swap(arr[i+1], arr[pivotIdx]);
return i+1;
}
void random_quick_sort(int* arr, int start, int end)
{
if(start < end) {
int mid = random_partition(arr, start, end);
random_quick_sort(arr, start, mid-1);
random_quick_sort(arr, mid+1, end);
}
}
int main ()
{
int n ;
scanf("%d",&n) ;
for ( int i = 0 ; i < n ; ++i )
scanf("%d",&v[i]) ;
random_quick_sort ( v , 0 , n - 1 ) ;
for ( int i = 0 ; i < n ; ++i )
printf ("%d ",v[i]) ;
}