2017-05-16 8 views
-1

この問題を解決するための私の試みでの更新です。 なぜアレイを逆順にソートするのですか?ロジックは私にとって意味があります。コードで2つの配列が正しく並べ替えられないのはなぜですか?

def combine_array(arr1,arr2) 
arr3 = [] 
arr1.each do |x| 
    arr3.push(x) 
end 

arr2.each do |x| 
    arr3.push(x) 
end 

arr3.each_index do |i| 
    arr3.each_index do |j| 
     if arr3[i] > arr3[j] 
     hold = arr3[i] 
     hold2 = arr3[j] 
     arr3[i] = hold2 
     arr3[j] = hold 
     end 
end 
end 
return arr3 

combine_array([1,5,3]、[6,2,4])

Click link to see the code and the array in reverse order

+2

あなたが欲しくない理由があるとします'(arr1 + arr2).sort'を実行するだけですか? – moveson

+0

申し訳ありません、私はそれを言及するのを忘れました。あなたの前提は正しい。 –

+0

元のコードまたは更新されたコードをお手伝いしますか?私は1つを選択し、それに固執すると思います。解決策がある場合は、回答として投稿することができます。しかし、質問を変更するのは混乱します。 – Stefan

答えて

1
  1. あなたはarr3[i+1..-1].each_index do |j|にわたって反復し、次に記しますfo arr3[j]ですが、それはおそらく意図していないarr3の正面部分です。 jarr3[i+1..-1]の中のインデックスであり、arr3ではありません。

  2. あなたはarr3を一度だけ通過し、すべての配列をアルゴリズムで1回のパスでソートすることはできません。

+0

私はarr3を何度も繰り返します。あなたがforループ内のforループであることに気付いたら。 arr3の各インデックスについて、残りのarr3を調べます。 例:配列[1,5,3,6,2,4] インデックス0の値と1、1,5,3,6,2,4の値を比較します。 インデックスの値と比較します1~5,3,6,2,4。 5が3よりも大きいので、番号を切り替える。私はインデックスの値が完全にソートされるまで、インデックス1の値を6,2,4と比較し続けます。 –

0

これは、ソリューション

def combine_array(arr1,arr2) 
arr3 = [] 
arr1.each do |x| 
    arr3.push(x) 
end 

arr2.each do |x| 
    arr3.push(x) 
end 

arr3.each_index do |i| 
    j = i+1 
    until j == arr3.length do 
     if arr3[i] > arr3[j] 
      hold = arr3[i] 
      hold2 = arr3[j] 
      arr3[i] = hold2 
      arr3[j] = hold 
     end 
     j+=1 
    end 
end 
return arr3 

エンド

です

combine_array([1,5,3]、[6,2,4])

関連する問題