Pagini recente » Cod sursa (job #1890117) | Cod sursa (job #2095564) | Cod sursa (job #2035707) | Rating Budusan Bogdan (bgddj) | Cod sursa (job #1189187)
#include <fstream>
#define DIM 500010
using namespace std;
int v[DIM], n, i;
void schimba(int &a, int &b) {
int aux = a;
a = b;
b = aux;
}
void insereaza(int v[DIM], int n, int x) {
v[++n] = x;
int c = n;
int p = n/2;
while (p!=0) {
if (v[c] > v[p]) {
schimba(v[c], v[p]);
c = p;
p = p/2;
} else
break;
}
}
void corecteaza(int v[DIM], int n) {
int p = 1;
int c = 2*p;
while (c <= n) {
if (c + 1 <= n && v[c+1] > v[c])
c++;
if (v[p] < v[c]) {
schimba(v[p], v[c]);
p = c;
c = 2 * p;
} else
break;
}
}
int main() {
ifstream fin("algsort.in");
ofstream fout("algsort.out");
fin>>n;
for (i=1;i<=n;i++) {
fin>>v[i];
insereaza(v, i-1, v[i]);
}
for (i=n;i>=2; i--) {
schimba(v[1], v[i]);
corecteaza(v, i-1);
}
for (i=1;i<=n;i++)
fout<<v[i]<<" ";
return 0;
}