Swift 选择排序算法。敏捷的
Ray Wenderlich的swift算法有一个很好的资源: 其中一个基本选项是“选择排序”: 似乎按预期工作。 然而,我怀疑我自己。Swift 选择排序算法。敏捷的,swift,algorithm,sorting,Swift,Algorithm,Sorting,Ray Wenderlich的swift算法有一个很好的资源: 其中一个基本选项是“选择排序”: 似乎按预期工作。 然而,我怀疑我自己。 某些边缘情况是否需要var lower=x 您的解决方案的效率要低得多,因为您是按“计数平方”交换的顺序进行交换的,而原始解决方案是按“计数”交换的顺序进行交换的。您的意思是,在外循环中进行交换更有效?为什么会这样?因为你最终做的交换要少得多——每个外环最多一次。这回答了我的问题。你可以自己测试一下。添加一个变量以跟踪对交换的每次调用。在一系列测试阵列上运行
某些边缘情况是否需要
var lower=x
您的解决方案的效率要低得多,因为您是按“计数平方”交换的顺序进行交换的,而原始解决方案是按“计数”交换的顺序进行交换的。您的意思是,在外循环中进行交换更有效?为什么会这样?因为你最终做的交换要少得多——每个外环最多一次。这回答了我的问题。你可以自己测试一下。添加一个变量以跟踪对交换的每次调用。在一系列测试阵列上运行这两个版本的代码,并比较结果。
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
}
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
}