我已经用臭名昭着的树形图(here)学习了Heap Sort的可视化表示,所以我开始寻找一种打印出来的方法,到目前为止我的进展非常顺利。我唯一的问题似乎是,如果没有更多的值填充在线上,我的程序似乎出于某种原因打印零。
我确定这可能是我的代码中的错误,或者需要添加额外的行,但如果这是最好的方法,我也在寻找建议。代码如下。
#include <stdio.h>
int HeapArray[] = {165, 245, 398, 426, 575, 661, 775, 895, 901, 1028, 1184, 1283, 1350,1427, 1598, 1698};
int main()
{
int i = 0, numL = 1;
int j, k;
for(k = 0; k < 6; k++)
{
if(HeapArray[i] == 0)
break;
for(j = 0; j < numL;j++)
{
printf("%d ", HeapArray[i]);
i++;
}
printf("\n");
numL *= 2;
}
return 0;
}
值得一提的是:
答案 0 :(得分:1)
你的索引i可能超越了数组的界限
您有16个元素,因此第一次打印1时,则打印2,然后打印3等
总共你会在第四行打印1 + 2 + 4 + 8 = 15.
当你到达最后一行(第五行)时,你只有一个要打印的元素。但是,你的内部循环从0到16,越过数组的边界(因此它打印0)
您应该在内部循环中添加一个检查,以确保您仍然有足够的元素。
请注意,我还强烈建议您在数组末尾添加一个0元素,这样就不会依赖于其边界之外的内存