
June 3rd, 2012, 12:38 PM
#16
Re: Array to Heap Tree
Something like this:
Code:
#include <algorithm>
int main()
{
const int capacity = 11;
int a[capacity] = {1, 2, 3, 4, 5, 6, 7};
int size = 7;
std::make_heap(a, a + size);
// Add 50 to the heap:
a[size++] = 50;
std: ush_heap(a, a + size);
return 0;
}
hmm why did you do "a+size" ?
How about this? does it seem right?
Code:
#include <iostream>
#include <algorithm>
void heap_sort(int* begin, int* end)
{
std::make_heap(begin, end);
std::sort_heap(begin, end);
}
int main ()
{
const int n = 11;
int a[n] = {1, 2, 3, 4, 5, 6, 7};
int size = 7;
heap_sort( &a[0], &a[size]);
// Add 50 to the heap:
a[size++] = 50;
std::push_heap(&a[size], &a[n]);
return 0;
}
thanks a lot for responding

June 3rd, 2012, 12:49 PM
#17
Re: Array to Heap Tree
Originally Posted by R1111
hmm why did you do "a+size" ?
It is a simpler way of writing &a[size].
Originally Posted by R1111
How about this? does it seem right?
It is wrong. Once you do sort_heap, the range is no longer a heap, so you cannot subsequently call push_heap with it. Furthermore, the first argument to push_heap should be a pointer to the first element in the array. The second argument... well, I already said this before. You need to think carefully about what the arguments to push_heap should be.
Actually, why don't you pause for a moment and use std::sort instead? Get familiar with how to use std::sort. This knowledge will help you understand how to use std::make_heap and std::push_heap, but very importantly, you can easily check if you are using std::sort correctly by printing the part of the array that is in use since it is far easier to check if a range is correctly sorted than to check if a range is a heap.
Tags for this Thread
Posting Permissions
 You may not post new threads
 You may not post replies
 You may not post attachments
 You may not edit your posts

Forum Rules

Click Here to Expand Forum to Full Width
OnDemand Webinars (sponsored)
