2017-08-04 19 views
0

私は以下のようにwave-sortを実行する関数を書いています。結果として得られる配列は、次の配列よりも大きい数字で始まらなければなりませんが、私のコードはそうしていません。入力された場合、例えば:Wave sort in Javascript

[73, 80, 40, 86, 14, 96, 10, 56, 61, 84, 82, 36, 85] 

...それは

[ 86, 96, 84, 85, 80, 82, 61, 73, 40, 56, 14, 36, 10 ] 

代わりに96ある次より大きい数で始まるの出力を与えます。

function waveSort(arr){ 
    arr = arr.sort(function(a, b) { 
     return b - a; 
    }); 

    for (var i = 1; i < arr.length; i += 2) { 
     if (arr[i-1] > arr[i]) { 
      var temp = arr[i]; 
      arr[i] = arr[i-1]; 
      arr[i-1] = temp; 
     } 
     if (i+1 < arr.length && arr[i+1] > arr[i]) { 
      temp = arr[i]; 
      arr[i] = arr[i+1]; 
      arr[i+1] = temp; 
     } 
    } 
    return arr; 
} 
+0

なぜより大きな値で開始する必要があると思いますか?あなたは実際に最初の 'if'でそれをテストしています。本当の場合は、より大きな値の前に小さな値を入れ替えます。あなたは何を期待しましたか? – trincot

+0

wavesortの方がいいですか? – Hoslack

答えて

2

明示的に低い値から開始するように関数を設計しました。最初if

あなたは最初の値が二以上である状況を検出し、もしそうなら(ときi = 1)、あなたはそれらを交換:

if (arr[i-1] > arr[i]) { 

だから、あなたがで終わる正常ですあなたの配列がで開始したい場合はインデックス1

よりもインデックス0の値が小さいほど、あなたの2 if秒で条件を変更、「高波」:

function waveSort(arr){ 
 
    arr = arr.sort(function(a, b) { 
 
     return b - a; 
 
    }); 
 

 
    for (var i = 1; i < arr.length; i += 2) { 
 
     if (arr[i-1] < arr[i]) { 
 
      var temp = arr[i]; 
 
      arr[i] = arr[i-1]; 
 
      arr[i-1] = temp; 
 
     } 
 
     if (i+1 < arr.length && arr[i+1] < arr[i]) { 
 
      temp = arr[i]; 
 
      arr[i] = arr[i+1]; 
 
      arr[i+1] = temp; 
 
     } 
 
    } 
 
    return arr; 
 
} 
 

 
var waved = waveSort([73, 80, 40, 86, 14, 96, 10, 56, 61, 84, 82, 36, 85]); 
 
console.log(JSON.stringify(waved));

+0

ありがとうございました。できます。 – Hoslack