我正在閱讀有關堆數據結構,我無法弄清楚何時使用max heapify函數以及爲什麼。二進制堆 - 如何以及何時使用max-heapify
我寫了一個插入函數,它將始終保持堆最大堆,我無法看到何時會使用max-heapify。
你能解釋一下嗎? 謝謝
這是我的代碼:
int PARENT(int i)
{
return i/2;
}
int LEFT(int i)
{
return 2*i;
}
int RIGHT(int i)
{
return 2*i +1;
}
void max_heapify(int *v, int index, int heapsize)
{
int largest;
int left = LEFT(index);
int right = RIGHT(index);
if (left<heapsize && v[left] > v[index])
largest = left;
else
largest = index;
if (right < heapsize && v[right] > v[largest])
largest = right;
if (largest !=index)
{
v[index] = v[index] ^v[largest];
v[largest] = v[index] ^v[largest];
v[index] = v[index] ^v[largest];
max_heapify(v,largest,heapsize);
}
}
void insert(int *v, int * length, int value)
{
v[++*length] = value;
int valuePos = *length;
int parent = PARENT(valuePos);
if (parent!=valuePos)
{
while (v[parent] < v[valuePos])
{
v[parent] = v[parent]^v[valuePos];
v[valuePos] = v[parent] ^v[valuePos];
v[parent] = v[parent]^v[valuePos];
valuePos = parent;
parent = PARENT(valuePos);
}
}
}
注意:標準庫已經提供了這個功能。 –