tags:

views:

182

answers:

1

From programming pearls, it is known that array[1...n] has heap property if for all 2<=i<=n x[i/2]<=x[i].

Here is my code:

import java.math.*;

public class Heap
{
    public static void main(String[]args)
    {
        int x[]=new int[]{12,20,15,29,23,17,22,35,40,26,51,19};
        for (int i=2;i<x.length;i++)
        {   
            if (x[Math.round(i/2)]<=x[i])
            {
                System.out.println("heap");
            }
            else
            {
                System.out.println("not heap");
            }
        }
    }
}

Here I used Math.round because 4/2 and 5/2 is same and =2. When I compile this code it shows me at last line that it is not heap. Maybe because the index starts from 1 and we don't pay attention to index 0, yes?

+1  A: 

You are on the right track. However, there are a few key notes:

  • Each time around the loop, the code will print "heap" or "not heap", as Moron has pointed out.

    • Try starting with a boolean variable initialized to true

    • Set it to false and break if the heap condition is not met in an iteration

    • Then check the value of the variable at the end

    • Or, you could just return false (or print "not met" and return) if the condition is not met in an iteration and return true (or print "met") after the loop

  • Start at 0 with your loop (btw, java arrays are 0-based, not 1-based); the heap condition applies to all nodes.

  • Get rid of that Math.round thing. It does absolutely nothing and clutters up your code

  • You might extract this into another method

Professor_Calculus