sort排序

作者: 万年小学生 | 来源:发表于2018-09-04 22:55 被阅读0次

    简介

    如果你的程序中有需要排序的逻辑,强烈建议使用系统自带的sort。因为系统自带的sort中实现了3种基本的排序算法:插入排序、快排和堆排序。并且会根据实际数据自动选择高效的排序算法。

    基本数据类型排序

    首先举例说明:

    func main() {
    
        nums := []int{1, 9, 6, 8, 4}
    
        fmt.Printf("nums : %v\n", nums) // nums : [1 9 6 8 4]
    
        sort.Ints(nums)
    
        fmt.Printf("nums : %v\n", nums) // nums : [1 4 6 8 9]
    
    }
    

    可以看到上面使用sort包对int数组进行了排序。sort包包含的主要方法有:

    func Float64s(a []float64)     //Float64s将类型为float64的slice a以升序方式进行排序
    func Float64sAreSorted(a []float64) bool //判定是否已经进行排序func Ints(a []int)
    func Ints(a []int)     //Ints 以升序排列 int 切片。
    func IntsAreSorted(a []int) bool  //IntsAreSorted 判断 int 切片是否已经按升序排列。
    func IsSorted(data Interface) bool // IsSorted 判断数据是否已经排序。包括各种可sort的数据类型的判断.
    func Strings(a []string)//Strings 以升序排列 string 切片。
    func StringsAreSorted(a []string) bool //StringsAreSorted 判断 string 切片是否已经按升序排列
    

    测试一下对字符串数组的排序:

    func main() {
    
        strs := []string{"123", "jim", "北京", "000", "kate"}
    
        fmt.Printf("strs : %v\n", strs) // strs : [123 jim 北京 000 kate]
    
        sort.Strings(strs)
    
        fmt.Printf("strs : %v\n", strs) // strs : [000 123 jim kate 北京]
    
    }
    

    对象排序

    针对对象排序,需要实现Len、Swap、Less三个接口,然后即可使用sort.Sort方法进行排序。实例如下:

    type Student struct {
        Name    string
        Age     int
        Height  float64
    }
    
    type StuSortByAge []Student
    
    func (c StuSortByAge) Len() int {
        return len(c)
    }
    func (c StuSortByAge) Swap(i, j int) {
        c[i], c[j] = c[j], c[i]
    }
    func (c StuSortByAge) Less(i, j int) bool {
        return c[i].Age < c[j].Age
    }
    
    func main() {
    
        stu01 := Student{
            Name:"Jim",
            Age:9,
            Height:1.21,
        }
        stu02 := Student{
            Name:"Kate",
            Age:6,
            Height:1.12,
        }
        stu03 := Student{
            Name:"Jack",
            Age:8,
            Height:1.22,
        }
        stu04 := Student{
            Name:"Lisa",
            Age:4,
            Height:1.01,
        }
        var sts []Student
        sts = append(sts, stu01, stu02, stu03, stu04)
    
        fmt.Printf("Students : %v\n", sts) // Students : [{Jim 9 1.21} {Kate 6 1.12} {Jack 8 1.22} {Lisa 4 1.01}]
    
        var ssba StuSortByAge
        ssba = sts
        fmt.Printf("Students : %v\n", ssba) // Students : [{Jim 9 1.21} {Kate 6 1.12} {Jack 8 1.22} {Lisa 4 1.01}]
    
        sort.Sort(ssba)
        fmt.Printf("Students : %v\n", ssba) // Students : [{Lisa 4 1.01} {Kate 6 1.12} {Jack 8 1.22} {Jim 9 1.21}]
    }
    

    上面是一个根据学生的年龄排序的实例,你也可以根据同样的规则,去实现一个根据身高排序的方法。

    相关文章

      网友评论

        本文标题:sort排序

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