我一直在学习 Chris Pine 的 Ruby 教程,目前正在研究一种无需使用即可对名称数组进行排序的方法sort
.
我的代码如下。它工作完美,但比我想象的更进一步!
puts "Please enter some names:"
name = gets.chomp
names = []
while name != ''
names.push name
name = gets.chomp
end
names.each_index do |first|
names.each_index do |second|
if names[first] < names[second]
names[first], names[second] = names[second], names[first]
end
end
end
puts "The names you have entered in alphabetical order are: " + names.join(', ')
这是我无法理解的排序。
我的理解是each_index
会查看数组中每个项目的位置。然后if
语句获取每个项目,如果数字大于下一个,则将其交换到数组中,继续执行此操作,直到最大的数字位于开头。我本以为这只会颠倒我的数组,但它确实按字母顺序排序。
有人能告诉我这个算法是如何按字母顺序工作的,以及它在什么时候查看起始字母是什么?
在此先感谢您的帮助。我确信这是非常简单的事情,但经过多次搜索后我不太明白!
我认为快速排序算法是更容易理解的算法之一:
def qsort arr
return [] if arr.length == 0
pivot = arr.shift
less, more = arr.partition {|e| e < pivot }
qsort(less) + [pivot] + qsort(more)
end
puts qsort(["George","Adam","Michael","Susan","Abigail"])
这个想法是,选择一个元素(通常称为主元),然后将数组划分为小于主元的元素和大于或等于主元的元素。然后对每个组进行递归排序并与枢轴合并。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)