选择排序
时间复杂度:
O(n^2)
原理(降序):
对于某个序列,每次遍历找到其中的最值,与第一位交换。然后依次循环执行。
步骤(降序):
1、假设第一位的值是最值
2、遍历并对比剩余值,找到其中的最值。若最值不是第一位,则和他进行交换。
3、依次遍历查找。
https://github.com/czasg/strualgo/blob/main/algo/sort/selection.go
package sort
import "github.com/czasg/strualgo/basis"
func SelectionSortASC[Number basis.Number](nums []Number) []Number {
newNums := make([]Number, len(nums))
for index, num := range nums {
newNums[index] = num
}
if len(newNums) < 2 {
return newNums
}
for i := 0; i < len(newNums)-1; i++ {
minValue := newNums[i]
selectIndex := i
for j := selectIndex + 1; j < len(newNums); j++ {
if newNums[j] < minValue {
minValue = newNums[j]
selectIndex = j
}
}
if selectIndex == i {
continue
}
newNums[selectIndex] = newNums[i]
newNums[i] = minValue
}
return newNums
}