原理
从所有记录中选出最小的一个数据元素与第一个位置的记录交换;然后在剩下的记录当中再找最小的与第二个位置的记录交换,循环到只剩下最后一个数据元素为止稳定性:不稳定
时间复杂度:O(n^2)
空间复杂度:O(1)- 步骤
1:初始状态:无序区为R[1..n],有序区为空;
2:第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;
3:n-1趟结束,数组有序化了
- 实现
func selectSort(arr []int) {
var miniindex int
i := 0
j := 0
for i = 0; i < len(arr); i++ {
miniindex = i
for j = i; j < len(arr); j++ {
if arr[j] < arr[miniindex] {
miniindex = j
}
}
if miniindex != i {
tmp := arr[i]
arr[i] = arr[miniindex]
arr[miniindex] = tmp
}
}
}