Cod sursa(job #773019)

Utilizator BlackLordFMI Alex Oprea BlackLord Data 31 iulie 2012 18:43:37
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <cstdio>
#include <time.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
FILE *f = fopen("algsort.in","r");
ofstream g("algsort.out");
int n, v[500002], i, j, aux, ii0, jj0;
int piv;
char tmp[11];
char buff[5500000];




inline int poz(int i, int j){
	
	ii0=1;
	jj0=0;
	
	piv = j - rand()%(j-i);
	
	aux = v[piv];
	v[piv] = v[j];
	v[j] = aux;
	
	while(i!=j)
	{
		if(v[i]>v[j])
		{
			aux=v[i];
			v[i]=v[j];
			v[j]=aux;
			aux=-ii0;
			ii0=-jj0;
			jj0=aux;
		}
		i+=ii0;
		j+=jj0;
	}
	return i;
}

void quicksort(int p, int u){
	int k;
	if(p<u)
	{
		k=poz(p, u);
		quicksort(p, k-1);
		quicksort(k+1, u);
	}
}

void itoa (int x, char *s) {
	if (x == 0) {
		s[0] = '0';
		s[1] = 0;
		return;
	}
	int k = 0;
	while (x) {
		s[k++] = x%10 + '0';
		x/=10;
	}
	s[k] = 0;
	char aux;
	for (i=0,j = k-1;i<=k/2;i++,j--) {
		aux = s[i];
		s[i] = s[j];
		s[j] = aux;
	}
}

int main(){
	srand(time(0));
	fscanf(f,"%d",&n);
	for(i=1; i<=n; i++)
		fscanf(f,"%d",&v[i]);
	quicksort(1, n);
	for(ii0=1; ii0<=n; ii0++) {
		itoa(v[ii0], tmp);
		strcat(buff, tmp);
		strcat(buff, " ");
		//g<<v[i]<<' ';
	}
	g<<buff;
	return 0;
}