I'm writing a radix sort implementation in Ruby as a self-teaching exercise, and something very odd is happening here. letters
ought to be a 2D array of buckets, one for each letter of the alphabet (0 for space/nil, 1-26 for letters). For some reason, this code is not inserting my word at the one index of letters, however. It's inserting it at every index. There also seems to be some sort of infinite loop which prevents it from terminating, which is also odd.
What am I doing wrong? Here is my code.
def radix_sort(words)
letters = Array.new(27, [])
offset = 'a'.ord
max_length = words.max_by { |word| word.length }.length
(max_length-1).downto(0) do |i|
words.each do |word|
if word[i] != nil then
index = word[i].downcase.ord - offset
letters[index + 1] << word
else
letters[0] << word
end
end
words = letters.flatten
letters = letters.map { |bucket| bucket.clear }
end
words
end
w = ["cat", "dog", "boar", "Fish", "antelope", "moose"]
p radix_sort(w)