首页 文章资讯内容详情

Golang学习 - sort 包

2026-06-01 2 花语

本文内容纲要:

------------------------------------------------------------ //满足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