Cod sursa(job #1411777)

Utilizator jurjstyleJurj Andrei jurjstyle Data 31 martie 2015 22:25:36
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 2.06 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] << " " ;
}
*/
//quicksort simplu
int n , v[500005];

void QuickSort(int st, int dr)
{
	if(st < dr)
	{
		//determinam pivorul
		int m = (st + dr) / 2;
		int aux = v[st];
		v[st] = v[m];
		v[m] = aux;
		int i = st , j = dr, d = 0;
		while(i < j)
		{
			if(v[i] > v[j])
			{
				aux = v[i];
				v[i] = v[j];
				v[j] = aux;
				d = 1 - d;
			}
			i += d;
			j -= 1 - d;
		}
		QuickSort(st , i - 1);
		QuickSort(i + 1 , dr);
	}
}

int main()
{
	f >> n;
	for(int i = 0 ; i < n ; i ++)
		f >> v[i];
	QuickSort(0 , n - 1);
	for(int i = 0 ; i < n ; i ++)
		g << v[i] << " ";
	return 0;
}