★sort | sort 包为切片及用户定义的集合的排序操作提供了原语.
- Interface接口
sort包有一个接口,实现了这个接口就被认为是可排序的,就可以使用sort包的函数了:
type Interface interface {
// 长度
Len() int
// 是否 i < j,升序排序
Less(i, j int) bool
// 交换i,j两个元素
Swap(i, j int)
}
PS:接受者是slice的话不需要用指针
- Sort函数
对于实现了Interface接口的变量来说可以使用快排,时间复杂度O(n*log(n)):
func Sort(data Interface)
不过快排是不稳定的,可能会被打乱顺序,可以用归并排序,时间复杂度O(n*log(n)):
func Stable(data Interface)
保证排序的稳定性,相等元素的相对次序不变。
sort包实现了常见类型数组(int、float64、string)和切片(slice)的排序方法
- Search函数
二分查找函数,不过函数只提供了二分查找的方法,定义如下:
func Search(n int, f func(int) bool) int
- n是数组长度
- f是查找函数,int指的是当前查找下标,当大于等于目标元素返回true
- 返回查找到的下标
PS:针对int、float64、string定义了三个二分查找方法,但这三个方法内并未检测数组是否有序,无序也不会报错但会返回错误结果。
- 判断函数
用以判断是否有序,函数名格式为 "Slice|Ints,Float64s,Strings" + "Is|Are" + "Sorted",返回bool
有疑问加站长微信联系(非本文作者)