在ruby中插入排序算法有问题

时间:2012-06-14 05:56:32

标签: ruby sorting

所以我试图学习如何在不使用.sort方法的情况下对数组进行排序,这是我到目前为止所做的,但中间数字正在退出。

def  my_sort(num)
for j in 1...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     

end

然后我运行方法

my_sort([3,1,2])

我得到了

=> 1...3 

但我想要

=> 1,2,3

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您没有返回修改后的数组,而是将对象反馈到for迭代器中。

你遗漏的只是将数组作为方法中的最后一件事:

def my_sort(num)
  # ...

  num
end

作为一个说明,破坏你给出的论点通常是不好的形式。更礼貌的功能会返回一份副本。

答案 1 :(得分:0)

插入排序的实际实现必须如下所示:

def my_sort(arr)
  for j in 1...arr.length
    key = arr[j]
    i = j-1
    while i>=0 and arr[i] > key # You used arr[i] = key here instead
      arr[i+1] = arr[i]
      i = i-1
    end 
    arr[i+1] = key
  end 
  arr #return the array
end