我试图堆积一个数组。我的代码使用一组唯一值正常工作。但是有重复条目的问题。最大值始终在根上实现。然而,结果并不是一堆。用重复数组对阵列进行堆积
CODE:
static int arr[7] = { 5, 6, 7, 4, 1, 3, 7 };
int _tmain(int argc, _TCHAR* argv[])
{
for (int i = (6 - 1)/2; i >= 0; i--)//assuming size 7(0 to 6)
{
heapify2(i);
}
return 0;
}
void heapify2(int key)
{
int nextchoice = (arr[2 * key + 1] > arr[2 * key + 2] ? (2 * key + 1) : (2 * key + 2));
if (arr[key] < arr[nextchoice])
{
arr[key] += arr[nextchoice];
arr[nextchoice] = arr[key] - arr[nextchoice];
arr[key] = arr[key] - arr[nextchoice];
}
}
RESULTANT堆: 7,6,5,4,1,3,7
这里,最后一个节点7自带5岁以下 有没有更好的办法解决这个问题?
请注意,我编辑了您的代码示例以修复格式。下次使用空格而不是制表符。 –