1.1 排序
可以通过sort.Ints(arri)进行排序,其中arri就是需要被升序排序的数组或切片。
同理使用sort.Float64s(arri)进行float类型排序,同理strings类型也可以使用sort包进行排序
为了检查某个数组是否已经被排序,可以通过函数IntsAreSorted(a []int)bool 来检查,如果返回true则表示已经被排序。
func main() {intSort()fmt.Println("------------------------------------------")floatSort()}func intSort() {a1 := [5]int{1, 2, 3, 4, 5}a2 := []int{2, 1, 4, 5, 3}fmt.Printf("a1类型是%v,是否已排序%t\n", reflect.TypeOf(a1), sort.IntsAreSorted(a1[:]))fmt.Printf("a2类型是%v,是否已排序%t\n", reflect.TypeOf(a2), sort.IntsAreSorted(a2))// 返回false表示未排序if !sort.IntsAreSorted(a2) {sort.Ints(a2)fmt.Println("排序后的a2是:", a2)}}func floatSort() {a1 := [5]float64{1.1, 1.5, 1.6, 1.7, 1.8}a2 := []float64{1.2, 3.4, 1.7, 3.2, 5.0}fmt.Printf("a1类型是%s,是否已排序%t\n", reflect.TypeOf(a1), sort.Float64sAreSorted(a1[:]))fmt.Printf("a2类型是%s,是否已排序%t\n", reflect.TypeOf(a2), sort.Float64sAreSorted(a2))// 返回false表示未排序if !sort.Float64sAreSorted(a2) {sort.Float64s(a2)fmt.Println("排序后的a2是:", a2)}}/*a1类型是[5]int,是否已排序truea2类型是[]int,是否已排序false排序后的a2是: [1 2 3 4 5]------------------------------------------a1类型是[5]float64,是否已排序truea2类型是[]float64,是否已排序false排序后的a2是: [1.2 1.7 3.2 3.4 5]*/
同样的也可以使用sort.String(strs []string)进行string的排序。
2.1 搜索
sort包中的搜索**采用的二分法,因此要搜索的数组必须是已经排序的**,否则索引无法正确查找到。
func main() {intSearch()fmt.Println("---------------------")floatSearch()}// ----------------------------------二分搜索(已经是被排序的数组)-------------------------------func intSearch() {arr := []int{2, 1, 4, 5, 3}sort.Ints(arr)index := sort.SearchInts(arr, 4)fmt.Println("排序后的结果是:",arr)fmt.Println("4所在的索引是:", index)}func floatSearch() {arr := []float64{1.2, 3.4, 1.7, 3.2, 5.0}sort.Float64s(arr)index := sort.SearchFloat64s(arr, 1.7)fmt.Println("排序后的结果是:",arr)fmt.Println("1.7所在的索引是:", index)}/*排序后的结果是: [1 2 3 4 5]4所在的索引是: 3---------------------排序后的结果是: [1.2 1.7 3.2 3.4 5]1.7所在的索引是: 1*/
可以通过查看官方文档,获取更详细的信息 https://golang.org/pkg/sort/
