【发布时间】:2016-08-31 08:02:31
【问题描述】:
我已经用 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
【问题讨论】:
标签: ruby algorithm loops infinite-loop bubble-sort