我试图理解使用的sort
方法:
(1..10).sort {|a,b| b <=> a} #=> [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
static VALUE
enum_sort(VALUE obj)
{
return rb_ary_sort(enum_to_a(0, 0, obj));
}
但是,我无法理解排序是如何运作的。请帮我理解排序方式。
答案 0 :(得分:2)
每当我遇到这样的问题时,我发现在Rubinius中查看相同的方法定义会很有帮助。 Rubinius是一个完全用红宝石编写的红宝石端口,这使得它更容易阅读(至少对我而言)。
在这种情况下,Enumberable#sort
只会将Enumerable
对象转换为Array
对象,然后调用Array#sort
。
在Rubinius中,Array#sort只需拨打Array#sortinplace,然后根据数组大小调用Array#isort或Array#mergesort。
isort(插入排序)和mergesort都是常见的排序算法,无论用什么语言编写都几乎相同,并且可以轻松搜索以获得更好的理解。
答案 1 :(得分:1)
1..10
是数字从1到10(步长1)的数组的缩写。
|a,b|
从数组中选取两个数字,b <=> a
对其进行比较。当+1
大于b
时,它会a
,当相等时会0
,或者当-1
更小时,会提供10 <=> 9
。对于+1
,结果为{{1}}。
基于此,执行普通的数组排序。老实说,我不知道Ruby使用的排序算法。
答案 2 :(得分:0)
Ruby根据最新的源代码
使用quicksort