Golang标准库学习——sort

package sort

import "sort"

sort包中包含的文件

打开sort包我们能看到下面这些文件

这里先看最关键的sort.go。

sort.go

sort文件中一开始就是最关键的Interface接口,一个满足sort.Interface接口的类型可以被sort包的函数进行排序。

type Interface interface {
	Len() int              // Len返回集合中元素的个数
	Less(i, j int) bool    // Less返回索引i的元素是否比索引j的元素小
	Swap(i, j int)         // Swap交换索引i和j的元素
}

Sort函数用来排序data。使用这个函数排序必须让自定义数据类型实现上面的Interface接口。

它调用1次data.Len确定长度,O(n*log(n))次data.Less和data.Swap排序。不能保证排序的稳定性。

func Sort(data Interface) {
	n := data.Len()
	quickSort(data, 0, n, maxDepth(n))
}

sort.go中已经为常用的三种数据类型 int、float64、string 提供了排序方法。这里以int为例。此时,如果我们需要为[]int排序,不需要手动实现Interface接口了,直接使用sort.Ints就可以了。

type IntSlice []int

func (p IntSlice) Len() int           { return len(p) }
func (p IntSlice) Less(i, j int) bool { return p[i] < p[j] }
func (p IntSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }

func (p IntSlice) Sort() { Sort(p) }

func Ints(a []int) { Sort(IntSlice(a)) }
func Float64s(a []float64) { Sort(Float64Slice(a)) }
func Strings(a []string) { Sort(StringSlice(a)) }

下面三个函数使用来判断 int float64 string 三种类型的切片是否有序

func IntsAreSorted(a []int) bool         { return IsSorted(IntSlice(a)) }
func Float64sAreSorted(a []float64) bool { return IsSorted(Float64Slice(a)) }
func StringsAreSorted(a []string) bool   { return IsSorted(Stri
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值