2016-08-14 77 views
0

我基本上是試圖通過將數字到正確的位置進行排序號在飛行中的輸入(不是100%肯定,但是這應該是插入排序)。我的理解是,要在javascript中插入數組,您需要使用數組拼接方法http://www.w3schools.com/jsref/jsref_splice.aspJavaScript數組拼接導致內存不足異常?

我實現我的目標的企圖代碼如下:

var N = parseInt(readline()); 
var powers = [0]; 
for (var i = 0; i < N; i++) { 
    var pi = parseInt(readline()); 
    for(var j=i;j<powers.length; j++){ 
     if(powers[j]>pi){ 
      powers.splice(j,0,pi); 
     } 
     else if(j+1==powers.length){ 
      powers[j+1]=pi; 
     } 
    } 
} 

當我運行這段代碼,我得到一個內存不足的異常。我只是想了解是我在上面的代碼中做錯了什麼。如果我使用拼接方法錯誤,並且它是內存泄漏的原因,那麼底層實際發生了什麼? 我知道還有其他的方法可以做這種排序,但我特別感興趣的是使用javascript數組進行插入排序。

+0

開始無論你使用的環境,肯定有很多可用了一個調試器。例如,所有主要的Web瀏覽器都內置了全功能的調試器.NodeJS有幾個可用的,其中之一是'node-inspector'。我建議中斷你正在做的事情,並學習如何使用該調試器逐個聲明代碼,這樣你就可以看到代碼是如何運行的。沒有什麼更多的信息可以確切地看你的代碼如何運行。 –

回答

3

在你else條件下,要添加到陣列中,使得它一里。這意味着在下次檢查powers.length循環,這將是一個較大的數字,這意味着你將再次進入循環體,這意味着你將再次添加到陣列中,這意味着你將重新回到循環體再次,這意味着......你看到了這個去向。 :-)

一旦你添加到數組(不管是哪個分支),退出循環(例如,與break)。


端注:如果您在i開始j因爲你是你目前不會做一個適當的插入排序。 i只是計算用戶表示他們將要輸入的條目數量,而不是這種排序的一部分。考慮:如果我輸入8和4,該怎麼辦?如果您從開始i,您將跳過8並將4放在錯誤的地方。 j需要在0

+1

另外'如果'情況下使陣列更長。所以它在每次迭代中都會發生。 – trincot

+0

@trincot:好一點,這樣做,只是至少在這種情況下,我們將繼續前進,因爲'權力[J]> pi'不會是真的了。不過,好點。 –

+0

謝謝。我忘了休息時間。基本的錯誤在我身邊。 – IgnitiousNites