Nu aveti permisiuni pentru a descarca fisierul grader_test33.ok
Cod sursa(job #778947)
Utilizator | Data | 16 august 2012 12:27:58 | |
---|---|---|---|
Problema | Sortare prin comparare | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.81 kb |
#include<cstdio>
using namespace std;
int i, a[500001], n, n2, aux;
void comp(int i) {int aux; if (i>1) {
if (a[i]<a[i/2])
{aux=a[i]; a[i]=a[i/2]; a[i/2]=aux; comp(i/2);}
}}
void heap(int i) {int aux; if (2*i<n) {
if ((a[2*i]<a[2*i+1])&&(a[2*i]<a[i])) {
aux=a[i]; a[i]=a[2*i]; a[2*i]=aux;
heap(2*i);
} else if (a[2*i+1]<a[i]) {
aux=a[i]; a[i]=a[2*i+1]; a[2*i+1]=aux;
heap(2*i+1);
}
}}
int main(){
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d", &n); n2=n;
for (i=1;i<=n;i++) {scanf("%d", &a[i]); comp(i);}
for (i=1;i<=n2;i++) {
printf("%d ", a[1]); a[1]=a[n]; a[n]=-1; n--;
heap(1); if (n==2) if (a[1]>a[2]) {aux=a[2]; a[2]=a[1]; a[1]=aux;}
}
printf("\n"); return 0;
}