在Ruby中使用递归方法创建排序方法(不使用.sort)

时间:2016-03-29 21:07:45

标签: ruby sorting recursion

我试图重新创建" .sort" Ruby中的函数,使用递归方法。但是,我得到的所有输出都是“Nil'而且我不确定为什么。谁能看到我做错了什么?

def sort arr
  if arr.length > 0
    result << arr.min
    arr.delete(arr.min)
    sort arr
  else
    new_array.length == 0
    result
  end
end

1 个答案:

答案 0 :(得分:0)

您遇到的问题是您有几个未分配的变量resultnew_array

这是一个使用partition和递归方法的自定义排序方法的示例。它使用数组的第一个元素,并使用partition将数组拆分为两个部分,并使用递归将该元素包含为小于和大于第一个元素的元素。

def sort(arr)
  return [] if arr.length == 0

  f_element = arr.shift
  less, greater = arr.partition {|x| x < f_element }
  sort(less) + [f_element] + sort(greater)
end

arr = "happiness".chars
print sort(arr)
#=> ["a", "e", "h", "i", "n", "p", "p", "s", "s"]