1.1 排序

可以通过sort.Ints(arri)进行排序,其中arri就是需要被升序排序的数组或切片。
同理使用sort.Float64s(arri)进行float类型排序,同理strings类型也可以使用sort包进行排序
为了检查某个数组是否已经被排序,可以通过函数IntsAreSorted(a []int)bool 来检查,如果返回true则表示已经被排序

  1. func main() {
  2. intSort()
  3. fmt.Println("------------------------------------------")
  4. floatSort()
  5. }
  6. func intSort() {
  7. a1 := [5]int{1, 2, 3, 4, 5}
  8. a2 := []int{2, 1, 4, 5, 3}
  9. fmt.Printf("a1类型是%v,是否已排序%t\n", reflect.TypeOf(a1), sort.IntsAreSorted(a1[:]))
  10. fmt.Printf("a2类型是%v,是否已排序%t\n", reflect.TypeOf(a2), sort.IntsAreSorted(a2))
  11. // 返回false表示未排序
  12. if !sort.IntsAreSorted(a2) {
  13. sort.Ints(a2)
  14. fmt.Println("排序后的a2是:", a2)
  15. }
  16. }
  17. func floatSort() {
  18. a1 := [5]float64{1.1, 1.5, 1.6, 1.7, 1.8}
  19. a2 := []float64{1.2, 3.4, 1.7, 3.2, 5.0}
  20. fmt.Printf("a1类型是%s,是否已排序%t\n", reflect.TypeOf(a1), sort.Float64sAreSorted(a1[:]))
  21. fmt.Printf("a2类型是%s,是否已排序%t\n", reflect.TypeOf(a2), sort.Float64sAreSorted(a2))
  22. // 返回false表示未排序
  23. if !sort.Float64sAreSorted(a2) {
  24. sort.Float64s(a2)
  25. fmt.Println("排序后的a2是:", a2)
  26. }
  27. }
  28. /*
  29. a1类型是[5]int,是否已排序true
  30. a2类型是[]int,是否已排序false
  31. 排序后的a2是: [1 2 3 4 5]
  32. ------------------------------------------
  33. a1类型是[5]float64,是否已排序true
  34. a2类型是[]float64,是否已排序false
  35. 排序后的a2是: [1.2 1.7 3.2 3.4 5]
  36. */

同样的也可以使用sort.String(strs []string)进行string的排序。

2.1 搜索

sort包中的搜索**采用的二分法,因此要搜索的数组必须是已经排序的**,否则索引无法正确查找到。

  1. func main() {
  2. intSearch()
  3. fmt.Println("---------------------")
  4. floatSearch()
  5. }
  6. // ----------------------------------二分搜索(已经是被排序的数组)-------------------------------
  7. func intSearch() {
  8. arr := []int{2, 1, 4, 5, 3}
  9. sort.Ints(arr)
  10. index := sort.SearchInts(arr, 4)
  11. fmt.Println("排序后的结果是:",arr)
  12. fmt.Println("4所在的索引是:", index)
  13. }
  14. func floatSearch() {
  15. arr := []float64{1.2, 3.4, 1.7, 3.2, 5.0}
  16. sort.Float64s(arr)
  17. index := sort.SearchFloat64s(arr, 1.7)
  18. fmt.Println("排序后的结果是:",arr)
  19. fmt.Println("1.7所在的索引是:", index)
  20. }
  21. /*
  22. 排序后的结果是: [1 2 3 4 5]
  23. 4所在的索引是: 3
  24. ---------------------
  25. 排序后的结果是: [1.2 1.7 3.2 3.4 5]
  26. 1.7所在的索引是: 1
  27. */

可以通过查看官方文档,获取更详细的信息 https://golang.org/pkg/sort/