Cod sursa(job #394530)

Utilizator MciprianMMciprianM MciprianM Data 11 februarie 2010 08:08:36
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream>
#include<algorithm>
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, pos, k, i;
	p=rand();
	p=p&(dr-st);
	p=p+st;
	k=a[p];	pos=st;
	swap(a[pos], a[p]);
	for(i=st+1;i<=dr;i++)
		if(a[i]<k)
			swap(a[++pos],a[i]);
	swap(a[pos],a[st]);
	return pos;
}
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>64){
		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;
}