Golang学习 - sort 包
本文内容纲要:
------------------------------------------------------------
//满足Interface接口的类型可以被本包的函数进行排序。
typeInterfaceinterface{
//Len方法返回集合中的元素个数
Len()int
//Less方法报告索引i的元素是否比索引j的元素小
Less(i,jint)bool
//Swap方法交换索引i和j的两个元素的位置
Swap(i,jint)
}
//对data进行排序(不保证相等元素的相对顺序不变)
//data默认为升序,执行Reverse后为降序。
funcSort(dataInterface)
//对data进行排序(保证相等元素的相对顺序不变)
//data默认为升序,执行Reverse后为降序。
funcStable(dataInterface)
//将data的排序动作更改为降序,Reverse并不改变元素顺序,只改变排序行为。
//更改操作不可逆,更改后的对象不可以再次Reverse。
funcReverse(dataInterface)Interface
//判断data是否已经排序
//未执行Reverse的必须为升序,执行Reverse的必须为降序
funcIsSorted(dataInterface)bool
------------------------------
//示例
funcmain(){
i:=[]int{3,7,1,3,6,9,4,1,8,5,2,0}
a:=sort.IntSlice(i)
fmt.Println(sort.IsSorted(a))//false
sort.Sort(a)
fmt.Println(a)//[011233456789]
fmt.Println(sort.IsSorted(a),"\n")//true
b:=sort.IntSlice{3}
fmt.Println(sort.IsSorted(b),"\n")//true
//更改排序行为
c:=sort.Reverse(a)
fmt.Println(sort.IsSorted(c))//false
fmt.Println(c)//&{[011233456789]}
sort.Sort(c)
fmt.Println(c)//&{[987654332110]}
fmt.Println(sort.IsSorted(c),"\n")//true
//再次更改排序行为
d:=sort.Reverse(c)
fmt.Println(sort.IsSorted(d))//false
sort.Sort(d)
fmt.Println(d)//&{0xc42000a3b0}
fmt.Println(sort.IsSorted(d))//true
fmt.Println(d)//&{0xc42000a3b0}
}
------------------------------
//对a进行升序排列
funcInts(a[]int)
//判断a是否为升序排列
funcIntsAreSorted(a[]int)bool
//搜索a中值为x的索引,如果找不到,则返回最接近且大于x的值的索引,
//可能是len(a)。
funcSearchInts(a[]int,xint)int
------------------------------
//示例
funcmain(){
a:=[]int{3,9,1,6,4,2,8,2,4,5,3,0}
sort.Ints(a)
fmt.Println(a)//[012233445689]
fmt.Println(sort.IntsAreSorted(a))//true
i:=sort.SearchInts(a,7)
fmt.Println(a[i])//8
}
------------------------------
//功能同上,类型不同
funcFloat64s(a[]float64)
funcFloat64sAreSorted(a[]float64)bool
funcSearchFloat64s(a[]float64,xfloat64)int
//功能同上,类型不同
funcStrings(a[]string)
funcStringsAreSorted(a[]string)bool
funcSearchStrings(a[]string,xstring)int
------------------------------
//实现了sort.Interface接口的[]int类型
typeIntSlice[]int
func(pIntSlice)Len()int//接口方法
func(pIntSlice)Less(i,jint)bool//接口方法
func(pIntSlice)Swap(i,jint)//接口方法
//对p进行升序排列
func(pIntSlice)Sort()
//搜索p中值为x的索引,如果找不到,则返回最接近且大于x的值的索引,
//可能是len(a)。
func(pIntSlice)Search(xint)int
------------------------------
//示例
funcmain(){
a:=sort.IntSlice{3,7,1,3,6,9,4,1,8,5,2,0}
a.Sort()
fmt.Println(a)//[011233456789]
fmt.Println(sort.IsSorted(a))//true
i:=a.Search(6)
fmt.Println(i,a[i])//86
}
------------------------------
//功能同上,类型不同
typeFloat64Slice[]float64
func(pFloat64Slice)Len()int
func(pFloat64Slice)Less(i,jint)bool
func(pFloat64Slice)Swap(i,jint)
func(pFloat64Slice)Sort()
func(pFloat64Slice)Search(xfloat64)int
//功能同上,类型不同
typeStringSlice[]string
func(pStringSlice)Len()int
func(pStringSlice)Less(i,jint)bool
func(pStringSlice)Swap(i,jint)
func(pStringSlice)Sort()
func(pStringSlice)Search(xstring)int
------------------------------
//Search采用二分法搜索,在小于n的索引中查找最小的满足f(索引)的值。返
//回找到的索引,如果没有符合要求的索引,则返回n。
funcSearch(nint,ffunc(int)bool)int
------------------------------
//示例
funcmain(){
a:=sort.StringSlice{"hello","world","golang","sort","nice"}
a.Sort()//二分法必须先排序
//获取首字母大于n的元素中最小的
i:=sort.Search(len(a),func(iint)bool{
returnlen(a[i])>0&&a[i][0]>'n'
})
//显示找到的元素
fmt.Println(a[i])//sort
}
------------------------------------------------------------
本文内容总结:
原文链接:https://www.cnblogs.com/golove/p/5924653.html