我已經實現了算法來計算數組倒數(它也合併了數組),但爲了使它更整潔,我希望對輸出進行排序和計數。調用私有方法問題
方法* count_and_sort *返回數組[number_of_inversions,[sorted_array]]。 方法倒置和* merge_sort *應該返回number_of_inversions和[sorted_array]分開,而是我得到NoMethodError
我錯過了什麼?
class Array
def inversions
count_and_sort[0]
end
def merge_sort
count_and_sort[1]
end
def merge_sort!
replace merge_sort
end
private
def count_and_sort
return [0, self] if self.size <= 1
left, right = partition.with_index{ |value, index| index < self.size/2}
left = left.count_and_sort
right = right.count_and_sort
merged = merge(left[1], right[1])
[left[0] + right[0] + merged[0], merged[1]]
end
def merge(left, right)
inversions = 0
merged = []
until left.empty? || right.empty?
if left.first < right.first
merged << left.shift
else
merged << right.shift
inversions += left.size
end
end
merged += left += right
[inversions, merged]
end
end
p [*1..20].shuffle.inversions
我試着用
def inversions
result = self.send(:count_and_sort)
result[0]
end
更換倒置但結果是一樣的。
PS任何其他批評和評論歡迎)
你能發佈確切的錯誤輸出嗎? – tessi
main.rb:20:在'count_and_sort'中:要求[9,6,4,1,12,14,16,15,5,3]的私有方法'count_and_sort':Array(NoMethodError) \t from main。 rb:4:'inversions' \t from main.rb:44:'' –
Konstantin