ruby - 在不使用 sort 方法的情况下按字母顺序对数组进行排序

标签 ruby arrays sorting each alphabetical

我一直在研究 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"])

这个想法是您选择一个元素(通常称为主元),然后将数组划分为小于主元的元素和大于或等于主元的元素。然后递归地对每个组进行排序并与枢轴组合。

关于ruby - 在不使用 sort 方法的情况下按字母顺序对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27068242/

相关文章:

ruby-on-rails - 如何计算循环次数

PHP 数组 : cross data

python - 如何使用 Python 和 OpenCV 从左到右、从上到下对轮廓进行排序

r - 仅按特定顺序对第一个字符进行排序

ruby - 如何使用 capybara 单击项目列表中的一项

ruby-on-rails - 如何拥有可维护的用户名黑名单

ruby - Ruby 中的朴素贝叶斯

java - 将颜色添加到颜色数组

c++ - 将 double 转换并连接到字节数组

jQuery 数据表 : how to sort by specific column?