我正在创建气泡排序算法。为什么我得到Integer与nil失败的错误消息比较失败(ArgumentError)?
def bubble_sort(arr)
arr.each_with_index do |i, j|
print arr[j]
print arr[j+1]
if arr[j] > arr[j+1]
print "swap"
end
end
print arr
end
bubble_sort([4,3,78,2,0,2])
答案 0 :(得分:0)
首先,当最后一个索引为J+1
时,您要求脚本读取j
索引。换句话说,您要求访问数组中的nil值。您必须确保不尝试访问数组中的n+1
元素。
只要到达最后一个元素,只需检查并中断循环即可:
break if arr.size-1 == j #j is the last index now
第二,您没有在代码中执行任何操作,而是进行打印。你可以做点什么
temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
答案 1 :(得分:0)
j+1
遍历数组时,找不到具有索引.each_with_index
的 Array元素。 j+1
返回nil
,然后尝试将其与引起参数错误的arr[j]
进行比较。
.each_with_index
在这里没有用,因为您仅使用索引。并且您需要再次运行检查是否找到未排序的值。
我的建议是使用从0到最后一个可能的索引值的循环。像这样:
def bubble_sort(arr)
index = 0
while index < arr.size - 1 do
if arr[index] > arr[index+1]
arr[index], arr[index+1] = arr[index+1], arr[index]
index = 0
else
index += 1
end
end
print arr
end
bubble_sort([4,3,78,2,0,2]) # => [0, 2, 2, 3, 4, 78]