1、概述
选择排序是一种简单直观的排序,其原理是每次从待排序的数据元素中选出最小/最大的一个元素,存放到序列的起始位置,然后再从剩余的元素中继续寻找最小/最大元素,放到已排序元素的末尾,以此类推,知道全部待排序元素排序完成。
选择排序是不稳定排序
2、算法原理
思想:通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录做交换
步骤:
1、在未排序的序列中找到最小/大的元素,存放到排序序列的起始位置,
2、然后再继续从剩余未排序的元素中继续寻找最小/大元素,放到已排序序列的末尾,
3、以此类推,知道所有元素均排序
3、举例
对 [6, 4, 9, 7, 5]排序
第一趟:找出4是最小,将4与6交换,使4放到最前面
第二趟:找到5最小,5与6交换,使5放到已排序的末尾
第三趟:找到6最小,6与9交换,使6放到已排序的末尾
第四趟:7 和 9是已经排好序的,不需要交换,到此,排序完成
4、算法实现
func chooseSort(_ array : [Int])->[Int]{
var list = array
var count = 0
for i in 0..<list.count {
//记录当前最小的数,比较i+1后更大的数进行记录
var min = i
count = i
for j in i+1..<list.count{
if list[j]<list[min]{
min = j
}
}
list.swapAt(i, min)
}
print(list)
print("count: ",count)
return list
}
调用:
let array2 = [8, 5, 2, 6, 9, 3, 1, 4, 0, 7]
SortSummary.chooseSort(array2)
运行结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
count: 9
5、时间复杂度
无论最好还是最坏情况下,比较次数都是n*(n-1)/2,即 O(n^2)
注:排序的具体实现代码在 SortSummary.swift 文件里 调用是在 ViewController.swift