在Golang中排序可以使用标准库中的sort包。

基本排序

对int的从小到大排序

arr := []int{1, 3, 5, 7, 9, 2, 4, 6, 8, 0}
sort.Ints(arr)
fmt.Println(arr)

输出:[0 1 2 3 4 5 6 7 8 9] 

对float的从小到大排序

arr := []float64{1.1, 3.3, 5.5, 7.7, 9.9, 2.2, 4.4, 6.6, 8.8, 0.0}
sort.Float64s(arr)
fmt.Println(arr)

输出:[0 1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9] 

对字符串按照字典序排序

arr := []string{"abc", "a", "ee", "ff", "dd", "cc", "bb"}
sort.Strings(arr)
fmt.Println(arr)

输出:[a abc bb cc dd ee ff]

 

自定义排序

自定义排序的核心实现Len()、Less()和Swap()方法。

对int的从大到小排序

package main

import (
    "fmt"
    "sort"
)

type IntArray []int

func (self IntArray) Len() int {
    return len(self)
}

func (self IntArray) Less(i, j int) bool {
    return self[i] > self[j]
}

func (self IntArray) Swap(i, j int) {
    self[i], self[j] = self[j], self[i]
}

func main() {
    arr := []int{1, 3, 5, 7, 9, 2, 4, 6, 8, 0}
    sort.Sort(IntArray(arr))
    fmt.Println(arr)
}

对结构进行排序

如果要对一组学生的成绩排序(从大到小),我们可以这样写:

package main

import (
    "fmt"
    "sort"
)

type Student struct {
    name string
    score int
}

type StudentArray []Student

func (self StudentArray) Len() int {
    return len(self)
}

func (self StudentArray) Swap(i, j int) {
    self[i], self[j] = self[j], self[i]
}

func (self StudentArray) Less(i, j int) bool {
    return self[i].score > self[j].score
}

func main() {
    arr := []Student{
        Student{"zhangsan", 60},
        Student{"lisi", 88},
        Student{"wangwu", 97},
        Student{"zhaoliu", 54},
    }
    sort.Sort(StudentArray(arr))
    fmt.Println(arr)
}