sort排序

简介

如果你的程序中有需要排序的逻辑,强烈建议使用系统自带的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}]
}

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值...
    Saxon_323e阅读 5,254评论 0 2
  • 场景 线上广告系统需要对广告进行排序,这一块其实蛮复杂的,涉及流量规划,点击反馈。不过为了快速上线,这些先不考虑,...
    董泽润阅读 4,538评论 0 0
  • Arrays.sort()根据入参类型选择以下排序算法 基本类型数组使用快速排序 对象数组使用归并排序 原因 使用...
    大头8086阅读 11,020评论 1 0
  • 刚刚看过“杜拉拉追婚记”这部电影,感触很深。现实中的我们有多人真的知道自己究竟想要什么呢?现在才觉得古人说的“自知...
    荣儿菇娘阅读 1,306评论 0 1
  • 春天是跑步的季节。周日,是横店一年一度的马拉松比赛,五点准时起床,从容地收拾好装备,看看今天阴沉的天气,心里...
    笑笑0201阅读 2,985评论 0 4