内容简介:一、sort包的内容,以及使用sort包提供了排序切片和用户自定义数据集以及相关功能的函数。sort包主要针对[]int、[]float64、[]string、以及其他自定义切片的排序。
一、sort包的内容,以及使用
sort包提供了 排序 切片和用户自定义数据集以及相关功能的函数。
sort包主要针对[]int、[]float64、[]string、以及其他自定义切片的排序。
接口
func Interface interface
结构体
type IntSlice struct type Float64Slice type StringSlice
函数
func Ints(a []int) func IntsAreSorted(a []int) bool func SearchInts(a []int, x int) int func Float64s(a []float64) func Float64sAreSorted(a []float64) bool func SearchFloat64s(a []float64, x float64) int func SearchFloat64s(a []flaot64, x float64) bool func Strings(a []string) func StringsAreSorted(a []string) bool func SearchStrings(a []string, x string) int func Sort(data Interface) func Stable(data Interface) func Reverse(data Interface) Interface func ISSorted(data Interface) bool func Search(n int, f func(int) bool) int
1)接口 type Interface
type Interface interface { Len() int // Len方法返回集合中的元素个数 Less(i, j int) bool // i>j,该方法返回索引i的元素是否比索引j的元素小、 Swap(i, j int) // 交换i, j的值 }
代码案例
package main import ( "fmt" "sort" ) type NewInts []uint func (n NewInts) Len() int { return len(n) } func (n NewInts) Less(i, j int) bool { fmt.Println(i, j, n[i] < n[j], n) return n[i] < n[j] } func (n NewInts) Swap(i, j int) { n[i], n[j] = n[j], n[i] } func main() { n := []uint{1,3,2} sort.Sort(NewInts(n)) fmt.Println(n) } /* 输出: 1 0 false [1 3 2] 2 1 true [1 3 2] 1 0 false [1 2 3] [1 2 3] */
从上面这个案例可以知道,在Less方法里面i > j,如果这个方法返回true,则会执行Swap方法。
根据这个结论,我们可以实现我们
2)结构体
三种结构体的方法都是一样的,只是分别针对int切片、float64切片、strings切片这三种不同的类型。
然后三种结果都有五个公开方法
1)
func (p xxxSlice) Len() int // 切片长度 func (p xxxSlice) Less(i, j int) bool func (p xxxSlice) Swap(i, j int) func (p xxxSlice) Search(x xxx) int // 这个和后面那个功能一样 func (p xxxSlice) Sort()
函数
1)func xxxs(a []xxx)
对[]int、[]float64、[]string三种类型变量进行排序
2)func xxxsAreSorted(a []xxx] bool
判断[]int、[]float64、[]string三种类型变量是否排序了
3)func Serchxxxs(a []xxx, x xxx) int
查找x插入之后会被插入的位置
4)func Sort(data Interface)
对实现接口的数据类型变量进行排序。它调用一次data.Len来决定排序的长度n,调用data.Less和data.Swap的开销为O(n*log(n))。此排序为不稳定排序。它根据不同形式决定使用不同的排序方式(插入排序、堆排序、快排)
5)func Stable(data Interface)
Stable对data进行排序,不过排序过程中,如果data中存在相等的元素,则它们原来的顺序不会改变,是一种稳定的排序。
6)func Reverse(data Interface) Interface
使用sort.Reverse结合sort.Sort进行逆排序,实现原来相反的排序。
代码案例
package main import ( "fmt" "sort" ) func main() { a := []int{1, 2, 5, 3, 4} fmt.Println(a) // [1 2 5 3 4] sort.Sort(sort.Reverse(sort.IntSlice(a))) fmt.Println(a) // [5 4 3 2 1] }
7)func IsSorted(data Interface) bool
判断data是否已经排序好了
8)func Search(n int, f func(int) bool) int
Search使用二分法进行查找,Search()方法会使用"二分查找"算法来搜索某指定切片[0:n],并返回能够f(i)=true的最小的i(0<=i<n)的值,当切片中无法找到f(i)=true时,在Search()方法会返回n。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 中兴通讯助力DevOps标准发布,喜获标准工作组成员授牌
- CODING 受邀参与 DevOps 标准体系之系统和工具 & 技术运营标准技术专家研讨会
- 中国电子技术标准化研究院雷虎:以标准为依托,构建区块链测试生态
- 倚博科技成为 DevOps/AIOps 标准工作组成员,助力国家DevOps/AIOps标准体系建设与落地
- C# 标准性能测试
- Python标准库一览
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
即将到来的场景时代
罗伯特•斯考伯、谢尔•伊斯雷尔 / 赵乾坤 周宝曜 / 北京联合出版公司 / 2014-5-1 / 42
科技大神、全球科技创新领域最知名记者 罗伯特·斯考伯:“技术越了解你,就会为你提供越多好处!” 互联网的炒作点一个一个不停出现,大数据、3D打印、O2O等,无不宣扬要颠覆商业模式。但是,互联网进入移动时代,接下来到底会发生什么?移动互联网时代真正带来哪些改变?这具体会怎样影响我们每一个人的生活?商业真的会被颠覆?目前为止没有一本书给出答案。 《即将到来的场景时代》不是就一个炒作点大加谈......一起来看看 《即将到来的场景时代》 这本书的介绍吧!