【发布时间】:2011-06-16 04:55:18
【问题描述】:
尝试通过使用递归(Pine 的书)编写我自己的排序方法来对数组进行排序。在 stackoverflow 上看到了一些其他示例,但我的代码看起来与它们不同。到目前为止我不明白的两件事:
- 什么是包装器方法,为什么需要包装器方法? (我认为是我在代码中添加的)。
- 如何修复“堆栈级别太深”错误。
编辑:新代码已更新,可以工作但不正确。
这是我目前所拥有的:
def word_sorter unsorted, sorted
if unsorted[1] == nil
sorted.push unsorted[0]
words_put(sorted)
elsif unsorted[0] <= unsorted[1]
sorted.push unsorted[0]
unsorted.shift
word_sorter(unsorted, sorted)
else
unsorted.push unsorted[0]
unsorted.shift
word_sorter(unsorted, sorted)
end
end
def words_put sorted
puts 'these are your words now organized.'
sorted.compact!
puts sorted.join(', ')
Process.exit
end
unsorted = Array.new
sorted = Array.new
puts 'list as many words as you want. I will sort them... I think'
while unsorted.last != ''
unsorted.push gets.chomp
if unsorted.last == ''
unsorted.pop
word_sorter(unsorted, sorted)
end
end
谢谢!
【问题讨论】:
-
你想实现什么排序算法?
-
“包装方法”不是 Ruby 术语。据推测,它指的是一种不做任何其他事情但以特定方式调用不同方法的方法。至于“堆栈级别太深”,这可能意味着您的递归正在无限发生,这意味着您结束递归的机制永远不会发生。
-
使用两个数组,其中一个以gets 呈现的顺序包含原始单词,然后检查彼此相邻的单词以在排序后的数组中获得正确的顺序。它应该总是压入“最低”(先是 a,然后是 b 等)单词,直到剩下最高的单词,然后最终将其压入排序数组。
-
请在
[2,3,1]上尝试您的算法。除非您定义要排序的[2,1,3],否则它将无法正确运行;-)
标签: ruby sorting methods recursion