EnricoilP
21-06-2008, 17:51
Ciao a tutti,
Sono due ore che sbatto la testa contro questo pezzo di codice. Data una lista di interi, devo restituire una max-heap.
import java.util.Arrays;
public class MaxHeap {
private int[] m_Heap;
private int m_Size;
// costruttori
public MaxHeap(int[] in)
{
m_Size = in.length;
m_Heap = in;
buildHeap();
}
public void buildHeap() {
for (int i = (int) ((m_Heap.length / 2) ); i >= 0; i--) {
heapify(i);
}
}
private void heapify(int i) {
int l = left(i);
int r = right(i);
int largest = 0;
if ((l < m_Size)&& (m_Heap[l] > m_Heap[i])){
largest = l;
}
else {
largest = i;
}
if ((r < m_Size) && (m_Heap[r] > m_Heap[largest])){
largest = r;
}
if (largest != i){
int swap = m_Heap[i];
m_Heap[i] = m_Heap[largest];
m_Heap[largest] = swap;
heapify(largest);
}
}
private int left(int i) {
return 2 * i;
}
private int right(int i) {
return 2 * i + 1;
}
public String toString() {
return Arrays.toString(m_Heap);
}
public static void main(String[] args) {
MaxHeap myHeap = new MaxHeap(myArray);
System.out.println(myHeap.toString());
}
static int[] myArray = {43,9,68,50,57,51,36,27,89,73,87,57,15,18,55};
Mi restituisce: [89, 87, 73, 55, 68, 57, 36, 50, 57, 43, 51, 9, 15, 18, 27]
... dove 55 ha come figli 50 e 57.
Non riesco proprio a vedere l'errore... :(
Vi ringrazio!
Sono due ore che sbatto la testa contro questo pezzo di codice. Data una lista di interi, devo restituire una max-heap.
import java.util.Arrays;
public class MaxHeap {
private int[] m_Heap;
private int m_Size;
// costruttori
public MaxHeap(int[] in)
{
m_Size = in.length;
m_Heap = in;
buildHeap();
}
public void buildHeap() {
for (int i = (int) ((m_Heap.length / 2) ); i >= 0; i--) {
heapify(i);
}
}
private void heapify(int i) {
int l = left(i);
int r = right(i);
int largest = 0;
if ((l < m_Size)&& (m_Heap[l] > m_Heap[i])){
largest = l;
}
else {
largest = i;
}
if ((r < m_Size) && (m_Heap[r] > m_Heap[largest])){
largest = r;
}
if (largest != i){
int swap = m_Heap[i];
m_Heap[i] = m_Heap[largest];
m_Heap[largest] = swap;
heapify(largest);
}
}
private int left(int i) {
return 2 * i;
}
private int right(int i) {
return 2 * i + 1;
}
public String toString() {
return Arrays.toString(m_Heap);
}
public static void main(String[] args) {
MaxHeap myHeap = new MaxHeap(myArray);
System.out.println(myHeap.toString());
}
static int[] myArray = {43,9,68,50,57,51,36,27,89,73,87,57,15,18,55};
Mi restituisce: [89, 87, 73, 55, 68, 57, 36, 50, 57, 43, 51, 9, 15, 18, 27]
... dove 55 ha come figli 50 e 57.
Non riesco proprio a vedere l'errore... :(
Vi ringrazio!