Rubyで基本的なバブルソートアルゴリズムを問題なく構築しました。コードは次のようになります:Ruby無限ループのバブルソートアルゴリズム
def bubble_sort(arr)
swapped=true
while swapped
swapped=false
for j in 0..arr.length-2 do
if arr[j]>arr[j+1]
arr[j], arr[j+1] = arr[j+1], arr[j]
swapped=true
end
end
end
arr
end
私は同じ方法を実装しようとしていますが、コードブロックを受け入れる機能を実装しようとしています。コードブロックの部分は正常に動作しますが、コードブロックが提供されていない場合、メソッドは上記と同じように見えますが、何らかの理由で無限ループに入ります:
"そうでない場合は、条件をチェックし、必要に応じてポジションを入れ替え、歩留まり部分をスキップします。私はrdebuggerでステップバイステップのデバッグを試みたが、理由を見つけることができなかった。
def bubble_sort_by(arr)
swapped = true
while swapped
swapped=false
for i in 0..arr.length-2 do
unless block_given?
arr[i], arr[i+1] = arr[i+1], arr[i] if arr[i] < arr[i+1]
swapped=true
end #unless
if block_given?
if yield(arr[i], arr[i+1])>0
arr[i], arr[i+1] = arr[i+1], arr[i]
swapped=true
end #if yield
end #if block_given?
end #for
end #while
puts arr
return arr
end
あなたの時間をありがとうTom、私の質問に答えるだけでなく、私のような初心者のための非常に貴重なヒントを提供しました。あなたの幸せを祈ります! – devwanderer