2012-06-14 21 views
3

所以我试图学习如何在不使用.sort方法的情况下对数组进行排序,这是迄今为止我所拥有的,但是中间数字已经退出了。在ruby中插入排序算法遇到问题

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 

我在做什么错?

+0

http://stackoverflow.com/a/38858611/1623261 –

回答

2

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

什么你错过了简直是离开阵列作为方法的最后一件事:

def my_sort(num) 
    # ... 

    num 
end 

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

+0

http://stackoverflow.com/a/38858611/1623261 –

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