Jamin Huntley Jamin Huntley - 3 months ago 27
Ruby Question

Learning Insertion Sort in Ruby

I have just started the MIT Introduction to Algorithms course through the material posted online. Along with the course I have also decided to learn/enhance my Ruby skills by coding the algorithms in it.

I am on the first algorithm given, which is Insertion sort, and I have the following code typed up but I am getting this error when I run it:


insertionsort.rb:5:in `>': comparison of Fixnum with nil failed (ArgumentError)


def insertionsort(num)
for j in 2..num.length
key = num[j]
i = j - 1
while i > 0 and num[i] > key
num[i+1] = num[i]
i = i - 1
end
num[i+1] = key
end
puts num
end

numbers = [23,34,46,87,12,1,66]

insertionsort(numbers)


I'm sure it is a fairly basic problem but I just can't grasp what it is at the moment. Any help or tips would be very much appreciated.

Answer

You are overruning the bounds of your array. The example you were given was assuming 1-indexed arrays, but arrays in ruby are 0-indexed. The first line should be

for j in 1...num.length
Comments