在Ruby中创建插入排序

时间:2014-03-13 01:18:11

标签: ruby

我正在尝试创建插入排序。我遇到了NoMethodError,我正在寻找一些帮助。

def insertion_sort array
  (1..array.length-1).each do |pull_position|
    checked_value = array.delete(pull_position)
    insert_point = pull_position

    while checked_value < array[insert_point - 1] and insert_point >= 0 do
      insert_point -= 1
    end

    array.insert(insert_point,checked_value)
  end
end


puts insertion_sort(["goof","fire","apple","charlie","banana","elephant","dog"])

1 个答案:

答案 0 :(得分:2)

问题是pull_position不是array的元素。 (它是一个索引。)所以array.delete(pull_position)返回nil,分配给checked_valuechecked_value < array ...引发了异常,因为nil没有方法<

而不是array.delete(pull_position)我希望您想要array.delete_at(pull_position),但这还不足以修复代码。

当我运行代码并获得此异常时,很容易发现问题:

NoMethodError: undefined method `<' for nil:NilClass
    from (irb):39:in `block in insertion_sort'
        ...

这是有价值的信息。它告诉我

时发生了异常
while checked_value < array[insert_point - 1] and insert_point >= 0 do

已执行且checked_value等于nil。因此,只需要查看checked_value最后一次分配值(nil)和宾果游戏的问题!