2013-02-05 53 views
0

我在Java中有一個代碼,它的工作原理非常完美,但是轉換爲JavaScript的代碼會引發錯誤。該希爾排序方法傳遞一個數組的方法(我使用控制檯調試)我的代碼是:Shell Sort不能在JavaScript上工作​​

this.shellSort = function(nums) 
    { 
//O contador de tempo inicia aqui 
    var tempoSS = new Date(); 
    var n = nums.length; 
    console.log("n = ",n); 
    var h = n/2; 
    console.log("h = ",h); 
    var c, j; 
    while (h > 0) 
    { 
     for (var i = h; i < n; i++) 
     { 
      c = nums[i]; 
      j = i; 
      while (j >= h && nums[j - h] > c) 
      { 
       nums[j] = nums[j - h]; 
    console.log("nums["+j+"] = ",nums[j]); 
       j = j - h; 
    console.log("j = ",j); 
      } 
      nums[j] = c; 
    console.log("nums["+j+"] = ",nums[j]); 
     } 
     h = h/2; 
    console.log("h = ",h); 
    } 

被捕獲的錯誤是-- [13:52:59.581] ReferenceError: reference to undefined property nums[(j - h)] @ file:///C:/Documents%20and%20Settings/erickribeiro/Desktop/www/index.html:240

測試頁:dev.erickribeiro。 com.br/index.html

完整的腳本是html頁面。 有什麼不對?

+0

我希望這是要實現這項運動。出於任何實際目的,沒有理由不使用本地JavaScript「排序」方法。 – aaaaaaaaaaaa

+0

是的,這是對我的學院朋友的敬意。她搬到了俄羅斯,我將向她展示我們的工作轉換爲JavaScript:D。我保留了我們工作中使用的註釋/註釋和變量名稱。 –

回答

0

我相信你陷入了一個無限循環,因爲h有時可能是一個浮點數。你必須確保它是一個整數(在Java中它始終是,因爲你可能宣佈它是這樣):

this.shellSort = function(nums) 
    { 
//O contador de tempo inicia aqui 
    var tempoSS = new Date(); 
    var n = nums.length; 
    console.log("n = ",n); 

    // HERE: 
    var h = Math.floor(n/2); 

    console.log("h = ",h); 
    var c, j; 
    while (h > 0) 
    { 
     for (var i = h; i < n; i++) 
     { 
      c = nums[i]; 
      j = i; 
      while (j >= h && nums[j - h] > c) 
      { 
       nums[j] = nums[j - h]; 
    console.log("nums["+j+"] = ",nums[j]); 
       j = j - h; 
    console.log("j = ",j); 
      } 
      nums[j] = c; 
    console.log("nums["+j+"] = ",nums[j]); 
     } 

     // AND HERE: 
     h = Math.floor(h/2); 
    console.log("h = ",h); 
    } 
} 
+0

謝謝!它的工作原理:D你很聰明 –

+0

你的console.log輸出暗示了我這個。 – bfavaretto