【发布时间】:2021-08-11 04:02:30
【问题描述】:
我正在尝试将一个最大堆堆成一个最小堆。由于某种原因,我没有得到我期望的结果。
我已经构建了我的最大堆,并且它的数组内容按预期显示:
60 50 30 20 40 10
当尝试对上述数组进行 heapfy 并将其转换为 min-heap 时,所需的结果是:
10 20 30 60 50 40
但是,我得到的结果是:
10 20 60 50 40 30
这是我的功能:
struct _heap
{
int max; //array max
int pos; //current position
int* priority; //array gets initialized after.
};
typedef struct _heap heap_t;
void heapify_min(heap_t* h, int father)
{
int smallest = father;
int left = 2 * father + 1;
int right = 2 * father + 2;
if (left < h->pos && h->priority[left] < h->priority[smallest) {
smallest = left;
}
if (dir < h->pos && h->priority[right] < h->priority[smallest])
smallest = right;
if (smallest != father) {
swap(father,smallest,h->priority);
heapify_min(h,left);
}
}
void swap(int a, int b, int *v)
{
int f = v[a];
v[a] = v[b];
v[b] = f;
}
void build_heap(heap_t* h)
{
int n = h->pos;
int i2 = (n/2) -1;
int i;
for (i = i2;i>=0;i--) {
heapify_min(h,i);
}
}
任何见解都会非常有帮助。
【问题讨论】:
标签: c data-structures heap minmax-heap