排序状态大学

Platforms Swift Versions Test

用于 Swift 的有状态排序算法。

关于

想象一下…

排序算法是一种可以像函数一样调用的值类型。它的状态代表算法执行过程中的特定时刻。每次调用都会推进算法并产生一个步骤:要么是一个待回答的比较,要么是最终的排序输出。当给出答案时,比较将产生算法的下一个值。可以调用算法的下一个值来产生下一个步骤,依此类推,直到产生输出。

排序状态大学将这个梦想变为现实。

提供的算法

用例

此框架中的排序算法并非为性能而设计,也不旨在用于通用实现。

名称

我知道名称中必须包含“sort”和“state”。附加“university”似乎很自然而且有趣。此框架本身并没有任何教育意义。

用法

创建算法

var algorithm = MergeSort(input: elements)

算法的输入不需要符合 Comparable,因为比较的答案由调用者提供。

推进算法

可变算法可以像函数一样调用。返回值是算法中的下一步:要么是一个比较,要么是最终的排序输出。

switch algorithm() {
case let .comparison(comparison):
    // Answer the comparison…
case let .finished(output):
    // Handle the sorted output…
}

回答比较

比较是关于两个元素固有顺序的决定。调用者负责始终如一地将固有顺序应用于比较。例如,“固有顺序”可能是用户的个人偏好,因此比较的答案将是用户更喜欢的元素。

可以直接回答比较以产生排序算法的下一个状态。

algorithm = comparison(.left)

algorithm = comparison(.right)

比较的答案也可以直接提供给算法并使其发生变化。两种方法产生相同的结果,但它们的调用模式适用于不同的用例。

algorithm.answer(.left)

algorithm.answer(.right)

处理排序后的输出

输出是元素排序后的数组。如何处理此值留给读者练习。

支持的平台

要求

安装

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/kylehughes/sort-state-university.git", from: "1.0.0"),
]

文档

文档可在 GitHub Pages 上获取.

贡献

排序状态大学目前不接受源代码贡献。Bug 报告将被考虑。

此框架是个人爱好。欢迎随意复制片段或 Fork,但不要期望太多支持。

作者

Kyle Hughes

my Mastodon

许可证

排序状态大学在 MIT 许可证下可用。

有关详细信息,请参阅 LICENSE