import java.util.Arrays;
public class Halda {
private int[]p;
public Halda(int[] p) {
this.p = p;
}
public void halduj(int idxKorena, int idxKoniec) {
while(true){
int idxLavy = 2 * idxKorena + 1;
int idxPravy = 2 * idxKorena + 2;
int pozMax = idxKorena;
if(idxLavy <= idxKoniec){
if(p[idxKorena] < p[idxLavy]){
pozMax = idxLavy;
}
}
if(idxPravy <= idxKoniec){
if(p[pozMax] < p[idxPravy]){
pozMax = idxPravy;
}
}
if(pozMax == idxKorena){
return;
} else {
vymen(idxKorena, pozMax);
idxKorena = pozMax;
}
}
}
public void vymen(int idx1, int idx2) {
int pom = p[idx1];
p[idx1] = p[idx2];
p[idx2] = pom;
}
public void vytvorHaldu() {
for (int i = p.length -1; i >= 0; i--) {
halduj(i, p.length - 1);
}
}
public void usporiadajHaldovanim() {
vytvorHaldu();
for (int i = p.length -1; i > 0; i--) {
vymen(i, 0);
halduj(0, i - 1);
}
}
public static void main(String[] args) {
int []p = {7,6,5,4,3,2,1};
Halda h = new Halda(p);
h.usporiadajHaldovanim();
System.out.println(Arrays.toString(p));
}
}