import java.util.ArrayList;
import java.util.List;
class Heap{
private int size;
private List<Integer> heap;
private List<Integer> sorted;
public Heap(int[] nums) {
this.size = nums.length;
int[] newNums = new int[nums.length + 1];
for (int i = 1; i < newNums.length; i++){
newNums[i] = nums[i - 1];
}
for (int i = 1; i < newNums.length / 2; i++){
int nowIndex = i;
while (nowIndex >= 1){
if (newNums[nowIndex] < newNums[nowIndex * 2] ||
newNums[nowIndex] < newNums[nowIndex * 2 + 1]){
int largeIndex = newNums[nowIndex * 2] > newNums[nowIndex * 2 + 1]?
nowIndex * 2:nowIndex * 2 + 1;
int t = newNums[largeIndex];
newNums[largeIndex] = newNums[largeIndex / 2];
newNums[largeIndex / 2] = t;
nowIndex = nowIndex / 2;
}else {
break;
}
}
}
this.heap = new ArrayList<>();
for (int i = 1; i < newNums.length; i++){
this.heap.add(newNums[i]);
}
}
public List<Integer> getHeap() {
return heap;
}
public List<Integer> heapSort(){
this.sorted = new ArrayList<>();
List<Integer> sortHeap = this.heap;
while (sortHeap.size() <= 0){
Integer root = sortHeap.remove(0);
this.sorted.add(root);
}
}
}