Cod sursa(job #508025)

Utilizator MciprianMMciprianM MciprianM Data 7 decembrie 2010 13:15:45
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<fstream>
#include<algorithm>
#include<ctime>
#include<cstdlib>
using namespace std;
int a[500009];
inline void swap(int& a, int& b){
	int aux;
	aux=a;a=b;b=aux;
}
int partitie(int st, int dr){
	int p, k, l, r;
	p=rand();	p=p&(dr-st);	p=p+st;
	k=a[p];	l=st-1;	r=dr;
	swap(a[dr],a[p]);
	for(;;){
		while(a[++l]<k)	;
		while(a[--r]>k)	if(l==r)	break;
		if(l>=r)	break;
		swap(a[l],a[r]);
	}
	swap(a[l], a[dr]);
	return l;
}
void sorteaza(int st, int dr){
	int k;
	int j, i;
	for(i=st+1;i<=dr;i++){
		j=i;
		k=a[j];
		while(j>0&&k<a[j-1])
			a[j]=a[j-1],j--;
		a[j]=k;
	}
}
void quisort(int st, int dr, int l){
	if(dr-st>0){
		int m=partitie(st, dr);
		quisort(st, m-1, l+1);
		quisort(m+1, dr, l+1);
	}
	else sorteaza(st, dr);
}
int main(){
	int n, i;
	srand(time(NULL));
	ifstream f("algsort.in");
	ofstream g("algsort.out");
	f>>n;
	for(i=0;i<n;i++)
		f>>a[i];
	quisort(0, n-1, 0);
	//sort(a, a+n);
	for(i=0;i<n;i++)
		g<<a[i]<<' ';
	g<<'\n';
	return 0;
}