堆排序"视觉"树打印额外的零

时间:2012-03-10 03:10:33

标签: c diagram heapsort

我已经用臭名昭着的树形图(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;
}

值得一提的是:

  • 在另一个最常用的循环中,我使用值6作为要打印的最大行,但是程序会停止在包含最后一个数组值的行上打印。
  • 我没有实现任何对齐以使图表100%准确,因为它似乎很容易离开(即没有额外的代码来混淆我)。

1 个答案:

答案 0 :(得分:1)

你的索引i可能超越了数组的界限

您有16个元素,因此第一次打印1时,则打印2,然后打印3等

总共你会在第四行打印1 + 2 + 4 + 8 = 15.

当你到达最后一行(第五行)时,你只有一个要打印的元素。但是,你的内部循环从0到16,越过数组的边界(因此它打印0)

您应该在内部循环中添加一个检查,以确保您仍然有足够的元素。

请注意,我还强烈建议您在数组末尾添加一个0元素,这样就不会依赖于其边界之外的内存