排序包中实现了3种基本的排序算法:插入排序。快排和堆排序。和其他语言中一样,这三种方式都是不公开的,他们只在类包内部使用,所以用户在使用那种包进行排序时无需考虑使用那种排序方式,sort.Interface定义的三个方法:获取数据集合长度的Len()方法,比较两个元素大小的少()方法和交换两个元素位置的交换()方法,就可以顺利对数据集合进行排序.sort包会根据实际数据自动选择高效的排序算法。
已知一个的结构组成的数组,现在要按照数组中的一个字段排序.python有一方法,那golang要怎么实现呢?其实golang也有这种方法,并且使用简单,功能强大。
我们先看一下sort.Sort()的源码
函数类型(数据接口){//切换到堆排序如果深度2 *装天花板(lg (n + 1)。 护士:=data.Len () maxDepth:=0 我:=n;我在;0;我在祝辞=1 { maxDepth + + } maxDepth *=2 快速排序(数据、0 n, maxDepth) } func快速排序(数据接口、a、b maxDepth int) { b比;12{//使用ShellSort片& lt;=12个元素 如果maxDepth==0 { 堆排序(数据,a, b) 返回 } maxDepth—— 枣疯病,三菱重工:=doPivot(数据,a, b)//避免递归> 主要包 导入( “排序” ) subInfo struct类型{ 数使用uint的json:“数” } []* subInfo子列表类型 func (p分表)交换(i, j int) {p[我],[j]=p [j], p[我]} func (p分表)int Len(){返回Len (p)} func (p分表)少(i, j int) bool{返回p[我]。数比;p [j]。数} 函数main () { st_list:=分表{} 我:=0;我& lt;10;我+ + { _sub:=, subInfo { 数:使用uint(我), } st_list=append (st_list _sub) } sort.Sort (st_list) 返回 }
, st_list只能初始化成<代码>分表{}> 代码,而不能初始化为<代码>使([]* subInfo, 0)> 代码,虽然他们结构是一样的。
最近诸事不顺,心烦的一匹,上周也拖更了,总之希望大家事事顺心,心爱的人身体健康。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。