2014-12-07 68 views
0

我們的目標是瞭解插入排序如何找到並將數字插入到預先排序的數組中。我應該彈出數組中的最後一個數字,並將其插入數組中正確的時間順序位置。建築物插入排序。不知道我在做什麼錯

該代碼似乎適用於第一個示例,但不是第二個。在第二個例子中,即使數組中有整數,正確答案似乎也出現在第四次迭代中。

這感覺就像我需要breakreturn並停止循環某處,但我不知道在哪裏。

def insertionSort(ar) 
    count = ar.count 
    value = ar.pop 

    p ar << value if value >= ar.last 

    reversed = ar.reverse 

    ar.count.times do |index| 
    reversed.unshift(reversed.first) if reversed.count < count 

    if reversed[index + 1] > value 
     reversed[index] = reversed[index+1] 
    else 
     reversed[index] = value 
    end 

    puts reversed.reverse.join(' ') 
    end 
end 

ar = [2, 4, 6, 8, 3] 
insertionSort(ar) 
#=> 2 4 6 8 8 
#=> 2 4 6 6 8 
#=> 2 4 4 6 8 
#=> 2 3 4 6 8 

negatives = [-3, -6, 7, 8, 9, 5] 
insertionSort(negatives) 
#=> -3 -6 7 8 9 9 
#=> -3 -6 7 8 8 9 
#=> -3 -6 7 7 8 9 
#=> -3 -6 5 7 8 9 
#=> -3 5 5 7 8 9 
+0

「....其正確的時間地點......」我知道你的意思,但時間是不是在這裏,正確的說法:) – FelixHJ 2014-12-07 23:14:22

+0

第一行是supsicious:#=> 2 4 6 8 8即你有8次兩次,我會從那裏開始 – FelixHJ 2014-12-07 23:30:24

回答

0

我想通了。我需要休息一下,然後放上else語句。

def insertionSort(ar) 
    count = ar.count 
    value = ar.pop 

    p ar << value if value >= ar.last 
    reversed = ar.reverse 

    ar.count.times do |index| 
    reversed.unshift(reversed.first) if reversed.count < count 

    if reversed[index + 1] > value 
     reversed[index] = reversed[index+1] 
     puts reversed.reverse.join(' ') 
    elsif reversed[index + 1] == value 
     reversed.slice!(index) 
     puts reversed.reverse.join(' ') 
     break 
    else 
     reversed[index] = value 
     puts reversed.reverse.join(' ') 
     break 
    end 
    end 
end 

ar = [2, 4, 6, 8, 3] 
insertionSort(ar) 

negatives = [-3, -6, 7, 8, 9, 5] 
insertionSort(negatives) 
相關問題