与插入排序不同,对于数组A中的n个元素,首先找出A中最小的元素并与A[0]中的元素进行交换。接着,找出A中次小的元素并与A[1]中的元素进行交换。对A中前n-1个元素按照该方式继续,该算法称为选择算法。
func selectionSort(_ array: [Int]) -> [Int] {
var resultArr = array
let n = resultArr.count
for i in 0..<(n - 1) {
var smallest = i
for j in (i + 1)..<n {
if resultArr[j] < resultArr[smallest] {
smallest = j
}
}
let t = resultArr[i]
resultArr[i] = resultArr[smallest]
resultArr[smallest] = t
}
return resultArr
}
var arr = selectionSort([2, 9, 6, 9, 9, 5, 1, 7, 5])
print(arr)
我们也可以通过一个输入输出参数来修改参数本身。注意,一个输入输出参数必须是可变类型,否则会报错。
var arr: [Int] = [2, 9, 6, 9, 9, 5, 1, 7, 5]
func selectionSort(_ arr: inout [Int]) {
let n = arr.count
for i in 0..<(n - 1) {
var smallest = i
for j in (i + 1)..<n {
if arr[j] < arr[smallest] {
smallest = j
}
}
let t = arr[i]
arr[i] = arr[smallest]
arr[smallest] = t
}
}
selectionSort(&arr)
print(arr)