0

誰かがこのコードを説明できますか? 演習のソリューション部分から取得したので、実行されます。sortedを使用して比較しないのはなぜですか。また、の後に追加する必要がある==のはなぜですか。sorted = falsesorteduntil

def bubble_sort(arr)
  sorted = false
  until sorted
    sorted = true
    (arr.count - 1).times do |i|
      if arr[i] > arr[i + 1]
        arr[i], arr[i + 1] = arr[i + 1], arr[i]
        sorted = false
      end
    end
  end

  arr
end

コードは次のようになると予想していました。

sorted = false
until sorted == true do

ただし、これに置き換えようとすると、次のエラーが発生します。

eval):12: (eval):12: compile error (SyntaxError)
(eval):3: syntax error, unexpected kDO_COND, expecting kEND
    (arr.count - 1).times do |i|
                        ^
(eval):12: syntax error, unexpected kEND, expecting $end

これは、エラーが発生している完全なコードです。

def bubble_sort(arr)
  sorted = false
  until sorted == true
    (arr.count - 1).times do |i|
      if arr[i] > arr[i + 1]
        arr[i], arr[i + 1] = arr[i + 1], arr[i]
        sorted = false
      end
    end
  end

  arr
end
4

2 に答える 2

1

ほとんどの場合、アルゴリズムと Ruby 構文を混同していると思います。

アルゴリズムに関してはsorted = true、 の後の行を削除することはできません。これは、決して trueuntilにならないためにループが終了しないためです。sorted

Ruby の構文については、あなたが書いたものは正しいuntil sortedですuntil sorted == true。あなたの問題はsorted = true、条件で再び false にならない限り、sorted に true を割り当てるものを削除することifです。

于 2013-05-26T13:17:16.047 に答える
0

=と を混同しないでください==。1 つは代入演算子で、もう 1 つは比較演算子です。

sorted = false # sets initial value for a flag
until sorted # check if the flag is true at beginning of iteration
  # code that can change `sorted`
end

アップデート

この場合、これら 2 つの形式は同等です。違いはありません。どちらも機能します。

until sorted
until sorted == true
于 2013-05-26T12:35:15.930 に答える