我在用Ruby编写Quicksort算法时遇到很多问题。我来自C ++ / Java,所以我的代码可能是完全错误的:
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中那样将数组设置为等于返回数组的函数?
编辑代码时,您必须具有一个类来定义IRB中的方法。另外,我修复了枢轴之前缺少美元的错误。
class SortingAlgorithms
def self.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
end
myArray = [5, 4, 3, 2, 1]
sorted = Array.new(SortingAlgorithms.quicksort(myArray))
myArray.each do |x|
print x
end
print "\n"
但是,另一个线程提供了美丽的红宝石方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句