第十一天:golang学习笔记之sort

★sort | sort 包为切片及用户定义的集合的排序操作提供了原语.

  1. Interface接口
    sort包有一个接口,实现了这个接口就被认为是可排序的,就可以使用sort包的函数了:
type Interface interface {
    // 长度
    Len() int
    // 是否 i < j,升序排序
    Less(i, j int) bool
    // 交换i,j两个元素
    Swap(i, j int)
}

PS:接受者是slice的话不需要用指针

  1. Sort函数
    对于实现了Interface接口的变量来说可以使用快排,时间复杂度O(n*log(n)):
func Sort(data Interface)

不过快排是不稳定的,可能会被打乱顺序,可以用归并排序,时间复杂度O(n*log(n)):

func Stable(data Interface)

保证排序的稳定性,相等元素的相对次序不变。
sort包实现了常见类型数组(int、float64、string)和切片(slice)的排序方法

  1. Search函数
    二分查找函数,不过函数只提供了二分查找的方法,定义如下:
func Search(n int, f func(int) bool) int
  • n是数组长度
  • f是查找函数,int指的是当前查找下标,当大于等于目标元素返回true
  • 返回查找到的下标

PS:针对int、float64、string定义了三个二分查找方法,但这三个方法内并未检测数组是否有序,无序也不会报错但会返回错误结果。

  1. 判断函数
    用以判断是否有序,函数名格式为 "Slice|Ints,Float64s,Strings" + "Is|Are" + "Sorted",返回bool

你可能感兴趣的:(第十一天:golang学习笔记之sort)