Cod sursa(job #646161)

Utilizator theep0Cruceru Radu theep0 Data 10 decembrie 2011 23:39:44
Problema Sortare prin comparare Scor 20
Compilator c Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
#include <stdlib.h>

int v[500001];

void qs(int* a,int l, int r)
{
	int q;
	if(l<r)
	{
		q = part(a,l,r);
		qs(a,l,q-1);
		qs(a,q+1,r);
	}
}

int part(int* a,int l, int r)
{
	int piv = a[r];
	int i=l-1;
	int j;
	int t;
	for(j=l;j<r;j++)
	{
		if(a[j]<=piv)
		{
			i++;
			t = a[i];
			a[i] = a[j];
			a[j] = t;
		}
	}
	t = a[i+1];
	a[i+1] = a[r];
	a[r] = t;
	return i+1;
}

int file_exists(const char * filename)
{
	FILE * file;
    if (file = fopen(filename, "r"))
    {
        fclose(file);
        return 1;
    }
    return 0;
}

int main(int argc,char** argv)
{
	FILE *f;
	FILE *fout;
	char* fname;
	char buf[8];
	int ln = 0;
	int i = 0;
	int x;
	//v = (int *)malloc(sizeof(int) * 15);

	fname = "algsort.in";
	//printf("%d",argc);
	//printf("\n%s",fname);
	if(file_exists(fname))
		f = fopen(fname,"r");
	else
	{
		return 1;
	}
	while(fscanf(f,"%s",buf) != EOF)
	{
		x = atoi(buf);
		v[ln++] = x;
	}
	//printf("%d\n",v[0]);
	qs(v,0,ln-1);
	fout = fopen("algsort.out","w");
	for(i=0;i<ln;i++)
		fprintf(fout,"%d ",v[i]);
	fclose(f);
	fclose(fout);
}