Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Learning Insertion Sort in Ruby

Tags:

algorithm

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.

like image 683
Jamin Huntley Avatar asked Mar 09 '09 01:03

Jamin Huntley


2 Answers

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
like image 91
Ed S. Avatar answered Nov 15 '22 21:11

Ed S.


The other answer is correct that you are going past the end of the values in the array because it is 0-based but there are other changes you need to make to make the algorithm work:

for j in 1..(num.length - 1)

and

while i >= 0 and num[i] > key
like image 25
Jeff Dallien Avatar answered Nov 15 '22 21:11

Jeff Dallien