在quick_sort中的Ruby调用方法给出错误的输出



我正在ruby中做快速排序,并使用quick_sort我正在抓取数组的最后3个元素并将其相乘以获得值。

我的快速排序工作得很好,但唯一的事情是,当我在quick_search中调用我的另一个方法max_product_three时,我传递给该方法的sorted_array只显示为两个随机数,如[-3,-2]。如果我从quick_search中取出我的方法,它会给出正确的输出。发生了什么,当我把我的方法排序数组是错误的,这是导致我的max_product_three不工作。

quick_search.rb

def quick_search(array)
return array if array.length <= 1
len = array.length - 1
left = []
right = []
pivot = array.sample
array.delete_at(array.index(pivot))
array.each do |num|
if num < pivot
left << num
else
right << num
end
end
sorted = []
sorted << quick_search(left)
sorted << pivot
sorted << quick_search(right)
sorted_array = sorted.flatten
p sorted_array
max_product_three(sorted_array)
end

max_product_three.rb

def max_product_three(sorted_array)
len = sorted_array.length - 1
take_3 = len - 3
mulitple = sorted_array.drop(take_3)
p mulitple.inject(:*)
end

我使用这个数组作为参考[-3,1,2,-2,5,6]

我想你写这篇文章是为了了解快速排序是如何工作的?因为ruby有一个#sort方法。😁

这里的东西很少。你打算做两件事:首先,对数组进行排序;其次,将排序数组中最大的三个值相乘?因为这不是你的代码当前所做的。你从排序中调用max_product_three方法,这意味着每次调用quick_sort时都会调用它。

更糟糕的是,它是方法中的最后一行。这意味着调用max_product_three的结果是每次迭代时返回的结果,而不是排序后的数组!因此,对于每个子排序,您返回的是单个数字,而不是排序后的数组。

同样,您的max_product_three方法乘以最后的4值,而不是最后的3个值。(你从它的长度减去1,然后减去3,所以你减去长度- 4个值,留下4个值相乘。)

您不需要在quick_search方法的末尾执行p sorted_array(大概应该是quick_sort!),但可以只使用sorted_array返回数组。

并且,更小的事情是,如果不使用显式操作符,您的初始保护子句会更好(也更像红宝石),例如:

return array unless array.length.positive?

这是相当多的,我可能误解了你在这里想要做的事情,所以如果我有的话请告诉我!

相关内容

  • 没有找到相关文章

最新更新