MinHeapify 打印不正确的值
MinHeapify printing incorrect value
我正在尝试想象为什么我的 minHeapify
排序不正确。这是我的代码:
import java.util.List;
import java.util.ArrayList;
public class Heap {
public void insert2(List<Integer> heap, int value) {
if(heap.isEmpty()) {
heap.add(value);
}
else {
heap.add(value);
for(int index = heap.size() / 2 - 1;index >= 0;index--) {
minHeapify(heap, index);
}
}
}
public void minHeapify(List<Integer> heap, int index) {
int smallest = index;
int leftChildIndex = 2 * index + 1;
int rightChildIndex = 2 * index + 2;
if(leftChildIndex < heap.size() && heap.get(leftChildIndex) < heap.get(smallest)) {
smallest = leftChildIndex;
}
if(rightChildIndex < heap.size() && heap.get(rightChildIndex) < heap.get(smallest)) {
smallest = rightChildIndex;
}
if(smallest != index) {
int temp = heap.get(smallest);
heap.set(smallest, heap.get(index));
heap.set(index, temp);
minHeapify(heap, smallest);
}
}
public static void main(String[] args) {
List<Integer> input2 = new ArrayList<Integer>();
Heap heap2 = new Heap();
heap2.insert2(input2, 3);
heap2.insert2(input2, 4);
heap2.insert2(input2, 48);
heap2.insert2(input2, 9);
heap2.insert2(input2, 5);
heap2.insert2(input2, 2);
System.out.println(input2);
}
}
输出为[2, 4, 3, 9, 5, 48]
最小堆的输出应该总是排序的。我对这个假设是否正确,它应该是 [2, 3, 4, 5, 9, 48]
吗?
您的实现是正确的,您执行以下插入步骤后的结果确实是 [2, 4, 3, 9, 5, 48]
。
The output for min heap should be always sorted
但是你对MinHeap
的理解有点错误,即每个节点都小于它的左右子节点。但是右子节点可以比它的兄弟节点大,也可以小于它的兄弟节点,只要比它的父节点大。
因此您的堆的 List
无法按正确顺序排序。
我正在尝试想象为什么我的 minHeapify
排序不正确。这是我的代码:
import java.util.List;
import java.util.ArrayList;
public class Heap {
public void insert2(List<Integer> heap, int value) {
if(heap.isEmpty()) {
heap.add(value);
}
else {
heap.add(value);
for(int index = heap.size() / 2 - 1;index >= 0;index--) {
minHeapify(heap, index);
}
}
}
public void minHeapify(List<Integer> heap, int index) {
int smallest = index;
int leftChildIndex = 2 * index + 1;
int rightChildIndex = 2 * index + 2;
if(leftChildIndex < heap.size() && heap.get(leftChildIndex) < heap.get(smallest)) {
smallest = leftChildIndex;
}
if(rightChildIndex < heap.size() && heap.get(rightChildIndex) < heap.get(smallest)) {
smallest = rightChildIndex;
}
if(smallest != index) {
int temp = heap.get(smallest);
heap.set(smallest, heap.get(index));
heap.set(index, temp);
minHeapify(heap, smallest);
}
}
public static void main(String[] args) {
List<Integer> input2 = new ArrayList<Integer>();
Heap heap2 = new Heap();
heap2.insert2(input2, 3);
heap2.insert2(input2, 4);
heap2.insert2(input2, 48);
heap2.insert2(input2, 9);
heap2.insert2(input2, 5);
heap2.insert2(input2, 2);
System.out.println(input2);
}
}
输出为[2, 4, 3, 9, 5, 48]
最小堆的输出应该总是排序的。我对这个假设是否正确,它应该是 [2, 3, 4, 5, 9, 48]
吗?
您的实现是正确的,您执行以下插入步骤后的结果确实是 [2, 4, 3, 9, 5, 48]
。
The output for min heap should be always sorted
但是你对MinHeap
的理解有点错误,即每个节点都小于它的左右子节点。但是右子节点可以比它的兄弟节点大,也可以小于它的兄弟节点,只要比它的父节点大。
因此您的堆的 List
无法按正确顺序排序。