Swift 选择排序算法。敏捷的

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

Ray Wenderlich的swift算法有一个很好的资源:

其中一个基本选项是“选择排序”:

似乎按预期工作。 然而,我怀疑我自己。
某些边缘情况是否需要
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
}