0
我在Ruby中編寫Quicksort算法時遇到了很多問題。我是從C++/Java的未來,所以我的代碼可能是完全錯誤的:Ruby中Quicksort的問題
def quicksort(*list)
if list.empty?
return list
end
$pivot = list.sample
list.delete_at(list.index($pivot))
current_element = list[0]
$smaller = Array.new
$larger = Array.new
list.each do |x|
if (list[x] <= $pivot)
$smaller << list[x]
else
$larger << list[x]
end
end
$sorted = Array.new
$sorted << self.quicksort(*$smaller)
$sorted << pivot
$sorted << self.quicksort(*$larger)
$sorted.flatten!
return *$sorted
end
myArray = [5, 4, 3, 2, 1]
sorted = Array.new(quicksort(myArray))
myArray.each do |x|
print x
end
print "\n"
這是我得到的錯誤:
你能不能設置相同的數組到一個返回數組的函數,就像在C++或Java中一樣?
請將錯誤添加爲文本,而不是圖像 – AlBlue
對不起,您是否看過錯誤信息?你從哪裏得到這樣的印象:錯誤信息與「設置一個返回數組的函數相等的數組」有什麼關係?我認爲錯誤信息非常明確:您將'quicksort'定義爲'private'方法,但您並未將其稱爲「private」方法。您需要將其稱爲「私人」方法,即沒有明確的接收方。 –
一些想法:ruby中的'$ foo'是一個全局變量。它看起來不像你的函數中的任何變量都需要是全局的。事實上,它們可能會給你帶來麻煩,因爲每次遞歸調用函數'$ sorted'時都會被覆蓋。當你在'def quicksort(* list)'中使用splat運算符時,你將'list'的每個元素作爲單獨的參數傳遞,而不是傳遞整個列表。我不認爲這是你想要的。同樣,只需返回'$ sorted'而不是'* $ sorted'。 – lwassink