我正在尝试创建一个使用bubble-sort将小数组按数字顺序排序的方法。此方法接受两个参数,一个数组和一个方法:
def bubble_sort_by(arr)
while(true)
counter = 0
for i in 0...(arr.size-1)
if yield (arr[i], arr[i+1]) > 0
saved = arr[i]
arr[i] = arr[i+1]
arr[i+1] = saved
counter += 1
end
end
if (counter == 0)
break
end
end
print arr
end
bubble_sort_by([4,3,78,2,0,2]) do |left,right|
return left - right
end
排序的数组应该是
[0,2,2,3,4,78]
目前我使用的是Ruby版本2.3.0p0。
当我尝试运行此代码时,我一直收到语法错误。
答案 0 :(得分:1)
这是固定版本:
def bubble_sort_by(arr)
while(true)
counter = 0
for i in 0...(arr.size-1)
if yield(arr[i], arr[i+1]) > 0
saved = arr[i]
arr[i] = arr[i+1]
arr[i+1] = saved
counter += 1
end
end
if (counter == 0)
break
end
end
print arr
end
bubble_sort_by([4,3,78,2,0,2]) do |left,right|
left - right
end
如您所见,它有两个问题:
yield
- 基本上空间是额外的,因为它没有将括号中的数字作为参数传递; return
- 您不希望块显式返回值,您需要在bubble_sort_by
中对其进行评估,然后在上下文中使用它的结果。