Cod sursa(job #1009757)

Utilizator lucky1992Ion Ion lucky1992 Data 13 octombrie 2013 19:39:26
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <algorithm>

using namespace std;

#define NMax 1000001
int pivot, i,j,q, N, chose;
ifstream in("algsort.in");
ofstream out("algsort.out");

int partition( int* A, int left, int right ){
		
		int mid = rand() % (right-left+1);
		mid = left + mid;
		//int left1 = A[left], right1 = A[right], mid = A[(left+right)/2];
		//int mid = (left+right)/2;
        if ( A[left]<= A[mid] && A[mid] <= A[right] ){
			pivot = A[mid];
			swap ( A[left], A[mid]);
		}
		else if ( A[mid] <= A[left] && A[left] <= A[right] ){
			pivot = A[left];
		}
		else{
			pivot = A[right];
			swap( A[left], A[right] );
		}
		//chose = rand()%(right-left+1);
		//pivot = A[left+chose];
		//swap( A[left], A[left+chose] );
		i = left + 1;
		for( j = left+1; j <= right; j++ )
			if( A[j] <= pivot ){
				swap( A[i], A[j] );
				i++;
			}
		swap( A[left], A[i-1] );
		
		return i-1;

}


void QuickSort( int* A, int left, int right ){

	if( left  >= right )
		return ;
	else{
		q = partition( A,left,right );
		QuickSort(A, left, q-1);
		QuickSort(A, q+1, right);
	}
}

int main (){

	srand( time( NULL ) );
	
	in>>N;
	int* A = new int[N];
	
	for( int i = 0; i < N; i++ )
		in >> A[i];
	
	QuickSort(A,0,N-1);
	
	for( int i = 0; i < N; i++ )
		out << A[i]<<" ";
		
	return 0 ;

}