我用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
謝謝你的時間湯姆,你不僅回答我的問題,而且還爲像我這樣的新手提供非常有價值的提示。祝你一切順利! – devwanderer