2016-04-28 21 views
1

何らかの理由で、このコードを適切に並べ替えることができません。順序付きリストを作成するために、順序外れ番号を置き換えています。なぜループが停止していないのですか?

var unsortedArray = new Array(1,2,5,4); 

    var sortedArray = unsortedArray; 
    var tempValue = 0; 

    function isSorted(array) 
    { 
     for (i = 0; i < array.length; i++) 
     { 
      if (array[i] > array[i+1]) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 

    function sort(array) 
    { 



     while (isSorted(array) == false) 
     { 
      for (i = 0; i < length; i++) 
      { 
       var tempValue = array[i]; 

       array[i] = array[i+1]; 
       array[i+1] = tempValue; 
      } 
     } 
    } 

    sort(sortedArray); 

    document.write(sortedArray); 

ここwhileループは、配列をソートしたときに停止することになって、それが起こることはありません。

+0

仮説:配列は期待どおりにソートされません。 – user2864740

+0

'for(i = 0; i

+0

あなたの並べ替えは、スワップが必要かどうかを見るために要素を比較していません。彼らはそれが必要かどうかにかかわらず、いつもそれらを交換します。したがって、配列はソートされた状態になることはありません。 – RJM

答えて

2

あなたはこのコード以来、無限ループがあります。

for (i = 0; i < length; i++) 
    { 
     var tempValue = array[i]; 

     array[i] = array[i+1]; 
     array[i+1] = tempValue; 
    } 

は配列をソートしませんが。

代わりにarray.prototype.sortを使用してみませんか?

+0

私はsortメソッドを使用しないようにしていますが、私は数値をソートする独自の方法を作ろうとしています。 – Mineohmight

+0

比較関数を以下のような独自のロジックで追加することができます: 'arr.sort(function(a、b){if(a> 12)return a; return b;});' –

1

これを試してみてください [n]要素が[n-1]より小さい場合、スワップします。

while (isSorted(array) == false) 
{ 
    for (i = 0; i < length-1; i++) 
    { 
     if(array[i]>array[i+1]){ 
      var tempValue = array[i]; 
      array[i] = array[i+1]; 
      array[i+1] = tempValue; 
     } 
} 

また(VAR i = 0; I <長さ - 1; iは++)に最適なループのために変化します。さもなければ、配列の最後に配列[length]にアクセスします。これは未定義です。 (幸いにもそれはソートに影響を与えないだろうが、それはとにかく正しいと良いでしょう。)ここ

0
for (i = 0; i < length; i++) 
    { 
     var tempValue = array[i]; 

     array[i] = array[i+1]; 
     array[i+1] = tempValue; 
    } 

あなたは左の値が右の値よりも大きいotの..... adjascent値がソートされているかどうかを確認することはありません....

はCで、このアルゴを参照してください.....

レビュー単純なバブルソートアルゴとしてみてください(私はソート関数のループのためになるように配列の長さの長さを検討していますが) here

関連する問題