Cod sursa(job #1411775)

Utilizator jurjstyleJurj Andrei jurjstyle Data 31 martie 2015 22:24:07
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std ;

ifstream f ("algsort.in") ;
ofstream g ("algsort.out") ;

// Intro Sort
/*
vector<int> V ;

int main ()
{
    register int n , x ;

    f >> n ;

    for ( int i = 0 ; i < n ; ++i )
        {
         f >> x ;
         V.push_back(x) ;
        }

    sort ( V.begin() , V.end() ) ;

    for ( vector<int> :: iterator I = V.begin() ; I != V.end() ; ++I )
        g << *I << " " ;

    return 0 ;
}
*/
// quicksort cu partitie randomizata
int v[500005] ;
int random_partition(int* arr, int start, int end)
{
    int pivotIdx = start + rand() % (end-start+1);
    int pivot = arr[pivotIdx];
    swap(arr[pivotIdx], arr[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 ;
 f >> n ;
 for ( int i = 0 ; i < n ; ++i )
    f >> v[i] ;
 random_quick_sort ( v , 0 , n - 1 ) ;
 for ( int i = 0 ; i < n ; ++i )
    g << v[i] << " " ;
}