2016-08-12 80 views
0

試圖實現一個簡單的氣泡排序。代碼如下:紅寶石氣泡排序不排序所有元素

def bubble(array) 
    start = 0 
    sorted = [] 
    while start < array.length - 1 
    if array[start] > array[start + 1] 
     array[start], array[start + 1] = array[start + 1], array[start] 
    else 
    end 
    start += 1 
    end 
    return array 
end 

print bubble([4,8,2,6,7,1]) 

我得到的輸出是:

[4, 2, 6, 7, 1, 8] 

哪裏是我的代碼的問題?

+0

你的'開始'計數器需要以某種方式重置,以便繼續進行比較。現在你的'while'循環只能遍歷所有的數字 –

+0

'else end'是多餘的fyi; @philipyoo是正確的,你需要重複遍歷數組,直到沒有更多的交換完成 – oldrinb

回答

0

首先,如果您打算使用sorted,您應該避免修改array,而是使用副本。你需要反覆通過數組迭代,直到沒有更多的項目都失靈,是這樣的:

def bubble(array) 
    sorted = array.dup 
    finished = false 
    until finished 
    start = 0 
    finished = true 
    while start < sorted.length - 1 
     if sorted[start] > sorted[start + 1] 
     sorted[start], sorted[start + 1] = sorted[start + 1], sorted[start] 
     finished = false 
     end 
     start += 1 
    end 
    end 
    return sorted 
end 

雖然我會做提的是,明確return是在Ruby中相對冷門的點;您可以簡單地將sorted作爲相同語義的最後一行。