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

Macmillan_ · · 560 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

★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

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:Macmillan_

查看原文:第十一天:golang学习笔记之sort

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

560 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传