首页
学习
活动
专区
圈层
工具
发布

Swift速记
EN

Stack Overflow用户
提问于 2014-06-08 16:31:38
回答 1查看 703关注 0票数 2

因此,我目前正在苹果网站上阅读“快速旅行”教程。(1)

我的困惑出现在排序/速记部分。给出的例子是

代码语言:javascript
复制
sort([1, 5, 3, 12, 2]) { $0 > $1 }

我把这封信打印出来看看发生了什么,下面是我得到的:

代码语言:javascript
复制
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),因为它位于数组的第一位。我明白算法和所有的.只是速记给我带来的困扰。我想这很挑剔,但是如果有人能帮我澄清这件事,我会非常感激的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-08 16:47:56

这与速记无关,它只是对排序内部实现的优化。参数传递到闭包的顺序并不重要,因此在内部它们将以任何碰巧是有效的顺序被传递。

从比较的顺序来看,所发生的事情似乎是插入排序--一种用于小数据集的常见算法,通常在一定的列表长度之上选择快速排序。

正如在结尾处理2时所看到的,插入排序接受每个新元素,并遍历已排序的数据以找到其正确的位置。因此,首先选择$0,然后依次将$1设置为每个现有元素。

在算法的最开始,没有进行比较,所以1从来没有放在$0插槽中。所需的第一个比较有新元素5,即现有元素1。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24108282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档