Ruby中的插入排序给出了未定义的方法错误

时间:2014-03-29 20:20:48

标签: ruby insertion-sort

我正在研究算法并尝试在Ruby中实现Insertion Sort。 我的代码:

  b = [15, 23, 1, 17, 99, 68];
   c=[];  
   for j in 2..b.size do
    klucz = b[j];
    c<<b[j];
    i=j-1;
    while i > 0 && c[i] > klucz do
      c[i+1]=c[i];
      i=i-1;
      c[i+1]=key;
    end
    return c;
   end

当我尝试运行代码时,我收到此错误

`block in <main>': undefined method `>' for nil:NilClass (NoMethodError)

有人有任何想法吗?

1 个答案:

答案 0 :(得分:1)

它来自这条线: while i > 0 && c[i] > klucz do

考虑第一次执行for j in 2..b.size do循环:

  • j被赋值为2
  • c将b [2]附加到其数组中。 c现在是[1]
  • 我被赋值为j - 1,又名1

现在在while i > 0 && c[i] > klucz do行,c只有一个元素,但您尝试引用c[i],即c[1]c[1]引用数组的 second 元素,因为数组基于ruby为零。因此c[1]为零,不能与大于比较运算符一起使用。