说明
选择排序,无需申请新的内存地址。算法逻辑简单,易于实现。缺点是算法运行时间为
逻辑
从数组第一个元素开始,对比后继所有元素,得出当前最小值,并与第一个元素交换位置。依次类推,最后得到排完序的数组。
代码
package arithmetic
import (
"math"
)
//InterfaceSort 排序接口 选择排序 插入排序
type InterfaceSort interface {
Len() int
Less(i, j int) bool
Swap(i, j int)
}
//SortSelection 选择排序
func SortSelection(slice InterfaceSort) {
if slice.Len() < 2 {
return
}
for i := 0; i < slice.Len(); i++ {
var smallestIdx = i
var j = i
for ; j < slice.Len(); j++ {
if slice.Less(j, smallestIdx) { // slice[j] < smallest
smallestIdx = j
}
}
slice.Swap(i, smallestIdx)
}
}
代码说明
面向对象实现,结构体实现相关接口即可调用该函数。
排序后的结果直接通过参数返回。
测试代码
package main
import (
"AZframework/arithmetic"
"fmt"
)
//IntSlice []int
type IntSlice []int
func (s IntSlice) Len() int { return len(s) }
func (s IntSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func (s IntSlice) Less(i, j int) bool { return s[i] < s[j] }
func main() {
var sliceC = IntSlice{5, 5, 4, 3, 2, 1, 1}
arithmetic.SortSelection(sliceC)
fmt.Printf("SortSelection slice = %v \n", sliceC)
}
日志输出
SortSelection slice = [1 1 2 3 4 5 5]
网友评论