2012-06-14 80 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