因此,我目前正在苹果网站上阅读“快速旅行”教程。(1)
我的困惑出现在排序/速记部分。给出的例子是
sort([1, 5, 3, 12, 2]) { $0 > $1 }我把这封信打印出来看看发生了什么,下面是我得到的:
The $0 is 5 and the $1 is 1
The $0 is 3 and the $1 is 5
The $0 is 3 and the $1 is 1
The $0 is 12 and the $1 is 5
The $0 is 2 and the $1 is 12
The $0 is 2 and the $1 is 5
The $0 is 2 and the $1 is 3
The $0 is 2 and the $1 is 1在第一行中,注意$1是1,$0是5,我的问题是为什么"1“不被指定为$0 (而不是$1),因为它位于数组的第一位。我明白算法和所有的.只是速记给我带来的困扰。我想这很挑剔,但是如果有人能帮我澄清这件事,我会非常感激的!
发布于 2014-06-08 16:47:56
这与速记无关,它只是对排序内部实现的优化。参数传递到闭包的顺序并不重要,因此在内部它们将以任何碰巧是有效的顺序被传递。
从比较的顺序来看,所发生的事情似乎是插入排序--一种用于小数据集的常见算法,通常在一定的列表长度之上选择快速排序。
正如在结尾处理2时所看到的,插入排序接受每个新元素,并遍历已排序的数据以找到其正确的位置。因此,首先选择$0,然后依次将$1设置为每个现有元素。
在算法的最开始,没有进行比较,所以1从来没有放在$0插槽中。所需的第一个比较有新元素5,即现有元素1。
https://stackoverflow.com/questions/24108282
复制相似问题