2010-05-15 20 views
-5

從編程珍珠,已知array[1...n]具有堆屬性,如果所有2<=i<=n x[i/2]<=x[i]此數組的堆性質

這裏是我的代碼:

進口的java.math。*;

public class Heap 
{ 
    public static void main(String[]args) 
    { 
     int x[]=new int[]{12,20,15,29,23,17,22,35,40,26,51,19}; 
     for (int i=2;i<x.length;i++) 
     { 
      if (x[Math.round(i/2)]<=x[i]) 
      { 
       System.out.println("heap"); 
      } 
      else 
      { 
       System.out.println("not heap"); 
      } 
     } 
    } 
} 

這裏我用了Math.round,因爲4/2和5/2是相同的,= 2。當我編譯這段代碼時,它會在最後一行顯示它不是堆。也許是因爲索引從1開始,我們不關注索引0,是嗎?

+0

天哪這一點。寫句子。表格段落。對不起,如果你不是英語母語的人。 – 2010-05-15 18:16:09

+0

這沒有意義。請慢慢重新閱讀,並嘗試重新格式化,併爲我們其他人重新提供這個信息。 – Axarydax 2010-05-15 18:17:26

+0

你應該使用'for'循環來代替'int i = 1; while(...){i ++; } – 2010-05-15 18:19:52

回答

1

你在正確的軌道上。但是,有幾個關鍵注意事項:

  • 周圍的每一次循環中,代碼將打印「堆」或「不堆」,如倫指出。

    • 試着以boolean變量初始化爲true

    • 將其設置爲falsebreak如果堆條件沒有迭代

    • 滿足,那麼在檢查變量的值結束

    • 或者,你可以只是return false(或打印「不符合」和return)如果條件沒有在迭代循環

  • 開始在0與環路(後滿足,return true(或打印「滿足」)順便說一句,JAVA陣列0爲基礎的,而不是1-基於);堆狀況適用於所有節點。

  • 擺脫那Math.round的事情。它絕對沒有和雜波您的代碼

  • 你可能提取到的另一種方法