I'm studying heap & heap sorting.
There is a array : arr[8] = {6,9,3,1,8,7,2,11}
When I'm trying to build the heap, using code and pencil, I faced two kinds of heap.
When using code, MaxHeap : 11 9 7 6 8 3 2 1
When using insertion theory, MaxHeap : 11 9 7 8 6 3 2 1
The code that i'm using :
int[] DoHeapSort(int[] value) {
int length = value.length;
for (int i = length / 2; i > 0; i--) {
maxHeapify(value, i, length);
}
//print Heap
for(int i = 0 ; i<value.length; i++)
System.out.println(value[i]);
return (value);
}
void maxHeapify(int[] array, int index, int heapSize) {
int left = index * 2;
int right = left + 1;
int max = index;
if (left <= heapSize && array[left - 1] > array[index - 1]) {
max = left;
}
if (right <= heapSize && array[right - 1] > array[max - 1]) {
max = right;
}
if (max != index) {
swap(array, index - 1, max - 1);
maxHeapify(array, max, heapSize);
}
}
Theory, in this case, create another array for heap and insert from 6 to 11 in order. (On the other hand, code is in-place heap)
Both maxHeap results satisfied heap definition. Then Heap is not unique ? Thanks
That's correct. The heap constraint (which is that children are not greater than their parents) does not completely specify the heap, so there is usually more than one possible arrangement.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With