Răspuns :
#include <iostream>
using namespace std;
ofstream fout("cifreord.out");
ifstream fin("cifreord.in");
const int NMAX = 500005;
int n, v[NMAX];
inline int father(int nod) { return nod / 2; }
inline int left_son(int nod) { return nod * 2; }
inline int right_son(int nod) { return nod * 2 + 1; }
void go_down(int nod, int lg)
{
int son = 1;
while(son) {
son = 0;
if(left_son(nod) <= lg) {
son = left_son(nod);
if(right_son(nod) <= lg && v[right_son(nod)] > v[son])
son = right_son(nod);
if(v[son] < v[nod])
son = 0;
}
if(son) {
swap(v[son], v[nod]);
nod = son;
}
}
}
void build_heap() { for(int i=n/2; i; i--) go_down(i, n); }
void heapsort()
{
build_heap();
for(int i=n; i>=2; i--) {
swap(v[i], v[1]);
go_down(1, i-1);
}
}
int main()
{
fin >> n;
for(int i=1; i<=n; i++) fin >> v[i];
heapsort();
for(int i=1; i<=n; i++) {
fout << v[i] << ' ';
if(!(i % 20)) fout << '\n';
}
return 0;
}
using namespace std;
ofstream fout("cifreord.out");
ifstream fin("cifreord.in");
const int NMAX = 500005;
int n, v[NMAX];
inline int father(int nod) { return nod / 2; }
inline int left_son(int nod) { return nod * 2; }
inline int right_son(int nod) { return nod * 2 + 1; }
void go_down(int nod, int lg)
{
int son = 1;
while(son) {
son = 0;
if(left_son(nod) <= lg) {
son = left_son(nod);
if(right_son(nod) <= lg && v[right_son(nod)] > v[son])
son = right_son(nod);
if(v[son] < v[nod])
son = 0;
}
if(son) {
swap(v[son], v[nod]);
nod = son;
}
}
}
void build_heap() { for(int i=n/2; i; i--) go_down(i, n); }
void heapsort()
{
build_heap();
for(int i=n; i>=2; i--) {
swap(v[i], v[1]);
go_down(1, i-1);
}
}
int main()
{
fin >> n;
for(int i=1; i<=n; i++) fin >> v[i];
heapsort();
for(int i=1; i<=n; i++) {
fout << v[i] << ' ';
if(!(i % 20)) fout << '\n';
}
return 0;
}
Vă mulțumim pentru vizita pe platforma noastră dedicată Informatică. Sperăm că informațiile prezentate v-au fost utile. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, nu ezitați să ne contactați. Așteptăm cu entuziasm să reveniți și vă invităm să ne adăugați la lista de favorite!