Cod sursa(job #1411767)

Utilizator jurjstyleJurj Andrei jurjstyle Data 31 martie 2015 22:19:59
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.67 kb
#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]) ;

}