2011-05-20 61 views
1

即時通訊卡堅持下面的代碼,它應該插入一個鍵/指針組合到數據結構的節點,並保持它的排序順序,但順序似乎是隨機的,我只是CANT圖出什麼錯了!爪哇 - 這種排序方法是一個謎

public void add (int val, Node no) { 
    // Find the index where to insert 
    int maxval = 0; 
    for (int o = 0; o < this.values.length; o++) 
     if (val < this.values[o]) { 
      maxval = o; 
      break; 
     } 
    // Move all the data from the chosen index one spot forward 
    for (int o = this.values.length-1; o > maxval; o--) { 
     this.values[o] = this.values[o-1]; 
     this.children[o] = this.children[o-1]; 
    } 
    // Insert the value 
    this.children[maxval] = no; 
    this.values[maxval] = val; 
} 
+1

插入一個值會丟棄(覆蓋)最大值。這是意圖嗎? – 2011-05-20 11:52:45

+2

在java中有可用的排序集。你不需要自己實現它。 – 2011-05-20 11:53:32

回答

4

那麼一個問題是,如果val大於所有的當前值,你最終maxval = 0。您可以通過初始化maxvalvalues.length - 1下手,或許解決這個問題...

另一個問題是,你正在失去有效的values[values.length - 1]原值 - 它被覆蓋與早期的價值,但沒有什麼是複製那些重視別處。這裏期望的行爲是什麼?

+0

啊,是的,那肯定是答案!我只是在方法的開頭添加一個if語句,並且噹噹前節點已滿時,調用該方法的代碼中的點不會被訪問,因此isnt問題。 謝謝! – taiu 2011-05-20 11:49:18

+0

我剛剛更改了 if(val taiu 2011-05-20 11:53:16

+0

我不認爲這是Jon的意思。爲什麼不只是初始化int maxval = values.length - 1;像他建議的第三行? – 2011-05-20 11:58:15