冒泡排序算法中 Integer 与 nil 的比较失败
Comparison of Integer with nil failed in bubble sort algorithm
我正在创建冒泡排序算法。为什么我得到 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])
首先,当最后一个索引可能是 j
时,您要求脚本读取 J+1
索引。或者换句话说,您要求访问数组中的 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
当您使用 .each_with_index
遍历数组时,无法找到索引为 j+1
的数组元素。 j+1
returns 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]
我正在创建冒泡排序算法。为什么我得到 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])
首先,当最后一个索引可能是 j
时,您要求脚本读取 J+1
索引。或者换句话说,您要求访问数组中的 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
当您使用 .each_with_index
遍历数组时,无法找到索引为 j+1
的数组元素。 j+1
returns 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]