2012-03-10 55 views
1

我學會了堆用臭名昭着的樹圖(here)的可視化表示排序,所以我着手尋找一種方法來打印出一個,我已經取得進展到目前爲止很好。我唯一的問題似乎是,如果沒有更多的值填滿行,我的程序似乎打印零出於某種原因。堆排序「視覺」樹打印額外的零

我確定這可能是我的代碼中的錯誤,或者需要添加額外的行,但如果這是最好的方法,我也在尋找建議。下面的代碼。

#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; 
} 

事情提:

  • 在其他大多數for循環中,我使用值6的最大行打印,但程序停止與最後行打印數組值。
  • 我沒有執行任何對齊操作來使圖表100%準確,因爲它似乎很容易離開最後(即沒有額外的代碼來混淆我)。

回答

1

您的索引,我可能會過去的約束陣列

你有16個元素,所以第一次打印1,然後打印2,然後3,等等

在總你會在第四行打印1 + 2 + 4 + 8 = 15。

當您到達最後一行(第五行)時,您只有一個要打印的元素。然而,你的內循環從0到16,超過了數組的邊界(所以它打印0)

你應該在內循環中添加一個檢查以確保你仍然有足夠的元素。

請注意,我也強烈建議你實際添加一個0元素到數組的末尾,所以你不依賴於它的邊界以外的內存