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,是否已排序true
a2类型是[]int,是否已排序false
排序后的a2是: [1 2 3 4 5]
------------------------------------------
a1类型是[5]float64,是否已排序true
a2类型是[]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/