Cod sursa(job #644914)

Utilizator lavinia_nLavinia Nastase lavinia_n Data 7 decembrie 2011 19:59:33
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<fstream>
using namespace std;

void shift(long *z,long r,long b) {
long a,m;
while((r*2)<b) {
	if((r*2)==b)
		m=r*2;
	else
		m=(z[r*2]>z[r*2+1])?r*2:r*2+1;
	if(z[r]<z[m]) {
		a=z[r];
		z[r]=z[m];
		z[m]=a;
		r=m;
	} else
		break;
}
}

void sort(long *z,long N) {
long i,a;
for(i=N/2-1;i>=0;i--)
	shift(z,i,N);
for(i=N-1;i>0;i--) {
	a=z[0];
	z[0]=z[i];
	z[i]=a;
	shift(z,0,i-1);
}
}

int main() {
long i,N,*z;
ifstream f("algsort.in");
// dimensiunea sirului pentru sortare
f>>N;
// aloca dinamic memoria pentru sortare
z=(long *)malloc(N*sizeof(long));
// Citeste in memorie elementele sirului din algsort.in
for(i=0;i<N;i++)
	f>>z[i];
f.close();
// Realizeaza sortarea in memorie
sort(z,N);
// Scrie rezultatul sortarii in algsort.out
ofstream g("algsort.out");
for(i=0;i<N;i++)
	g<<z[i]<<endl;
// Inchide fisierul algsort.out
g.close();
return 0;
}