2017-06-07 15 views
0

enter image description hereカーンアカデミー:JavaScriptのループが長すぎます

私はアルゴリズムのkhanアカデミーコースで読んでいます。私はhttps://www.khanacademy.org/computing/computer-science/algorithms/insertion-sort/p/challenge-implement-insertion-sortです。これまでのところ私は持っています:

var insert = function(array, rightIndex, value) { 
for(var j = rightIndex; 
    j >= 0 && array[j] > value; 
    j--) { 
    array[j + 1] = array[j]; 
} 
array[j + 1] = value; 
}; 

var insertionSort = function(array) { 

for(var i= 1; i < array.length ; i++) { 
    insert(array, i ,array[i+1]); 
} 

}; 

var array = [22, 11, 99, 88, 9, 7, 42]; 
insertionSort(array); 

問題のように見えるスクリーンショットのコード行を見ることができますが、それは私にはうまく見えます。私は間違って何をしていますか?

+0

エラーは何ですか? – oguzhancerit

+0

配列の長さをループするのではなく(常にアイテムを追加しているので)、コピーをループします。 'var insertionSort = function(array){ var copy = array.slice();for(var i = 0; i

答えて

1

あなたはiで降りrightIndexを開始し、値array[i + 1]を移動するが、irightIndex + 1にある要素を設定することにより、array.lengthinsert開始に達しています。これにより、配列が大きくなります。

は、現在の要素を移動し、代わりに前のインデックスから開始

:それは成長できないので、デバッグの際にこれをキャッチする

​​

一つの方法は、シールあなたの配列にある:

var array = Object.seal([22, 11, 99, 88, 9, 7, 42]); 

これはstrict modeでのみ機能しますが、汚れたモードでは、間違いを隠すだけです。

関連する問題