Ruby中的Quicksort问题

Flippoc

我在用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中那样将数组设置为等于返回数组的函数?

米哈伊尔·西多林(Mikhail Sidorin)

编辑代码时,您必须具有一个类来定义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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章