Cod sursa(job #508165)

Utilizator MciprianMMciprianM MciprianM Data 7 decembrie 2010 17:58:53
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <ctime>

using namespace std;

int a[500001];

int Partition(int st, int dr){
    int p=rand()&(dr-st);
	p+=st;
	//int p = ( st + dr ) / 2;
	swap(a[st],a[p]);
	p=a[st];
	int i, j;
	i=st, j=dr;
	while(i<j){
		if ( a[i]>p ){
			swap(a[i],a[j]);
			j--;
		}
		else ++ i;
	}
	if (a[i]>p){
		--j, -- i;
	}
	swap(a[st],a[i]);
	return i;

}


void quick(int l, int r){

    if(r - l > 0){

        int q = Partition(l, r);
        quick(l, q-1);
        quick(q+1, r);
    }
}

int main(){
	srand(time(NULL));
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    int i = 0, n;
    scanf("%d", &n);
    for(i = 0; i < n; i++)
        scanf("%d", &a[i]);
    quick(0, n-1);
    for(i = 0; i < n; i++)
        printf( "%d ", a [ i ] );
	printf ( "\n" );
	return 0;
}