美文网首页
选择排序算法 Go

选择排序算法 Go

作者: AusenZ | 来源:发表于2018-08-13 17:25 被阅读0次

    说明

    选择排序,无需申请新的内存地址。算法逻辑简单,易于实现。缺点是算法运行时间为 O(N^2)

    逻辑

    从数组第一个元素开始,对比后继所有元素,得出当前最小值,并与第一个元素交换位置。依次类推,最后得到排完序的数组。

    代码

    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]

    相关文章

      网友评论

          本文标题:选择排序算法 Go

          本文链接:https://www.haomeiwen.com/subject/jimubftx.html