Pagini recente » Cod sursa (job #2271286) | Cod sursa (job #948593) | Cod sursa (job #2816000) | Cod sursa (job #2925915) | Cod sursa (job #771659)
Cod sursa(job #771659)
#include <fstream>
using namespace std;
int v[500010],n,i,aux;
void up(int i) {
//urca in heap elementul de pe poz i a heapului
int c = i;
int p = c/2;
while (p!=0) {
if (v[c] > v[p]) {
aux = v[c];
v[c] = v[p];
v[p] = aux;
c = p;
p = c/2;
} else
break;
}
}
void down(int i, int H) {
int p = i;
int c = 2*p;
while (c<=H) {
if (c+1 <= H && v[c+1] > v[c])
c++;
if (v[p] < v[c]) {
aux = v[c];
v[c] = v[p];
v[p] = aux;
p = c;
c = 2*p;
} else break;
}
}
int main() {
ifstream f("algsort.in");
ofstream g("algsort.out");
f>>n;
for (i=1;i<=n;i++)
f>>v[i];
// transform v in heap (max)
for (i=2;i<=n;i++)
up(i);
for (i=n;i>=2;i--) {
aux = v[1];
v[1] = v[i];
v[i] = aux;
down(1,i-1);
}
for(i=1;i<=n;i++)
g<<v[i]<<" ";
return 0;
}