Pagini recente » Cod sursa (job #2893808) | Cod sursa (job #888915) | Monitorul de evaluare | Profil damageshot | Cod sursa (job #1009757)
#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 ;
}