【发布时间】:2015-03-06 08:24:20
【问题描述】:
我正在尝试创建排序算法的多线程版本。我不明白为什么这个算法总是只返回 Array[1] 而不是完整的数组。
class Array
def quick_sort
return self if self.length <= 1
pivot = self[0]
if block_given?
less, greater_equals = self[1..-1].partition { yield(x, pivot) }
else
less, greater_equals = self[1..-1].partition { |x| x < pivot }
end
l = []
g = []
Process.fork {l = less.quick_sort }
Process.fork {g = greater_equals.quick_sort}
Process.waitall
return l + [pivot] + g
end
end
【问题讨论】:
-
Array[1]是什么意思? -
具有单个元素的数组,例如
a = Array.new([1]) -
你为什么不写
[1]? -
我是说这是它返回的,不是我想要的,而且我是 ruby 新手,所以我不知道所有代码等价。
-
顺便说一句,你有一个语法错误,其中一个块不包含正确的参数:
less, greater_equals = self[1..-1].partition { yield(x, pivot) }应该是less, greater_equals = self[1..-1].partition { |x| yield(x, pivot) }
标签: ruby multithreading sorting concurrency parallel-processing