Ray Wenderlich提供了一个很好的快速算法资源: https://github.com/raywenderlich/swift-algorithm-club
其中一个基本的是"选择排序":
func selectionSort(_ array: [Int]) -> [Int] {
guard array.count > 1 else { return array }
var a = array
for x in 0 ..< a.count - 1 {
var lowest = x
for y in x + 1 ..< a.count {
if a[y] < a[lowest] {
lowest = y
}
}
if x != lowest {
swap(&a[x], &a[lowest])
}
}
return a
}
我试图了解这里发生的事情并与var lowest = x
步骤混淆。
我决定为问题编写自己的解决方案,并没有使用该步骤:
func selectSortArray1(_ array: [Int]) -> [Int] {
guard array.count > 1 else {return array}
var subArray = array
for x in 0..<subArray.count - 1 {
for y in x+1..<subArray.count {
if subArray[y] < subArray[x] {
swap(&subArray[x], &subArray[y])
}
}
}
return subArray
}
似乎按预期工作。
但是,我怀疑自己。
某些边缘情况需要var lowest = x
吗?