Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
Solved

# Java heap sorting questions

Posted on 2010-11-27
Medium Priority
493 Views
That is java class which sorts array.
Questions:
1) What are the numbers of steps you needed to build the heap, and to destroy the heap?
2) How to get the sum of the construction and destruction steps?

Website: http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/heap/heapen.htm

``````public class HeapSorter
{
private static int[] a;
private static int n;

public static void sort(int[] a0)
{
a=a0;
n=a.length;
heapsort();
}

private static void heapsort()
{
buildheap();
while (n>1)
{
n--;
exchange (0, n);
downheap (0);
}
}

private static void buildheap()
{
for (int v=n/2-1; v>=0; v--)
downheap (v);
}

private static void downheap(int v)
{
int w=2*v+1;    // first descendant of v
while (w<n)
{
if (w+1<n)    // is there a second descendant?
if (a[w+1]>a[w]) w++;
// w is the descendant of v with maximum label

if (a[v]>=a[w]) return;  // v has heap property
// otherwise
exchange(v, w);  // exchange labels of v and w
v=w;        // continue
w=2*v+1;
}
}

private static void exchange(int i, int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}

}    // end class HeapSorter
``````
0
Question by:prog458
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 2

LVL 37

Expert Comment

ID: 34224072
Since this is most likely a school assignment of some kind, we can't just give out answers but I can sure point you to how to solve it.

I don't see any destruction code, but the entire heap is stored in a single array. So how many steps would it take to 'destroy' that?

Your questions 1 and 2 appear to be the same. This is how you would count the construction steps. Look at how many times the for loop in buildheap runs. So for each of those you do downheap. What is the highest amount of steps that downheap could take? (Hint: the heap is a binary heap so the maximum height is known. You should know what it is too.)

Now just multiply those two numbers together.
0

Author Comment

ID: 34228020
Thanks for help i think i am getting there. How can i put those numbers into code. It would be ok with buildheap. How would i do with a downheap?
Theoretically it says h=log(Base2)(N+1)-1 - max hight.The thing is i want to generate that answer from code. Do you have any suggestions.
0

LVL 37

Accepted Solution

TommySzalapski earned 2000 total points
ID: 34228044
Are you trying to actually count the instructions? In that case just make a global variable start it at 0 and increment it in the loop in downheap and nowhere else.
If you want the runtime, you don't want or need it in the code. They want the average case runtime which you can see is O(n*lg(n))
The current hight of the heap can be calculated as the number of times the loop in downheap runs.
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suppose you use Uber application as a rider and you request a ride to go from one place to another. Your driver just arrived at the parking lot of your place. The only thing you know about the ride is the license plate number. How do you find your U…
In this post we will learn different types of Android Layout and some basics of an Android App.
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.
###### Suggested Courses
Course of the Month6 days, 3 hours left to enroll