Cod sursa(job #1043875)

Utilizator Lucian-GeorgeFMI Popa Lucian George Lucian-George Data 28 noiembrie 2013 23:45:43
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<iostream>
#include<fstream>
#include<math.h>
#include<stdio.h>
using namespace std;
#define maxim 999999999
long v[600001],a[600001];

int main()
{
	long i,n,x,q,min,poz,m,ok,j,l,lung;
	FILE *f,*g;
	f=fopen("algsort.in","r");
	g=fopen("algsort.out","w");
	
	fscanf(f,"%d",&n);
	q=sqrt(n);
	for (i=1; i<=n; i++)
	{
		fscanf(f,"%d",&v[i]);
		if (a[(i+q-1)/q]==0) a[(i+q-1)/q]=v[i];
		else
		if (a[(i+q-1)/q]>v[i]) a[(i+q-1)/q]=v[i];
	}
	
	lung=(n+q-1)/q;
	
	for (i=1; i<=n; i++)
	{
		min=maxim;
		for (j=1; j<=lung; j++)
			if (a[j]<min) {min=a[j]; poz=j;}
		fprintf(g,"%d ",min);
		ok=1;
		m=maxim;
		for (j=(poz-1)*q+1; j<=poz*q; j++)
		{
			//if (j<=n)
			if (v[j]==min && ok==1) {v[j]=maxim; ok=0;}
				else if (v[j]<m) m=v[j];
		}
		a[poz]=m;
	}
			
	return 0;
}