标准库sort
Go 语言的标准库 sort
包提供了强大且易用的排序功能,能够对多种类型的数组进行排序。
基本数据类型排序
标准库提供了三种内置排序函数用于排序,只支持正向排序
sort.Ints()
sort.Float64s()
sort.Strings()
|
|
同时标准库提供函数来判断是否已经排序
sort.IntsAreSorted()
sort.StringsAreSorted()
要实现反向排序
- 先将把
[]int
转换为sort.IntSlice
类型,具备Len()
,Less()
,Swap()
方法的类型:sort.IntSlice(nums)
- 再返回一个降序的包装器:
sort.Reverse(...)
- 使用排序算法对这个降序包装器进行排序:
sort.Sort(...)
- 综合可得:
sort.Sort(sort.Reverse(sort.IntSlice(nums)))
自定义排序规则
sort.Slice
是 Go 标准库中一个非常强大且灵活的函数,用于对任意类型的切片进行排序,只需提供一个比较函数。
|
|
参数名 | 类型 | 说明 |
---|---|---|
slice |
any (接口类型) |
任何切片([]T )都可以 |
less |
func(i, j int) bool |
比较函数,用来决定排序顺序(基于索引) |
|
|
复杂排序结构
在 Go 中,sort.Interface
是标准库 sort
包中定义的一个接口,用于支持自定义类型的排序。只要你实现了这个接口的三个方法,就可以用 sort.Sort()
对你的类型进行排序。
接口定义
|
|
方法 | 作用 |
---|---|
Len() |
返回元素数量 |
Less(i,j) |
如果元素 i < j ,返回 true (即决定排序顺序) |
Swap(i,j) |
交换第 i 和 j 个元素 |
示例代码
|
|
常见函数
func Sort(data sort.Interface)
:根据接口实现进行排序func Reverse(data Interface) Interface
:需要配合sort.Sort
使用,返回一个降序的包装器func Stable(data Interface)
:根据接口实现进行稳定排序