用于 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)
输出是元素排序后的数组。如何处理此值留给读者练习。
dependencies: [
.package(url: "https://github.com/kylehughes/sort-state-university.git", from: "1.0.0"),
]
排序状态大学目前不接受源代码贡献。Bug 报告将被考虑。
此框架是个人爱好。欢迎随意复制片段或 Fork,但不要期望太多支持。
排序状态大学在 MIT 许可证下可用。
有关详细信息,请参阅 LICENSE
。