### **排序&二分查找**
```go
package main
import (
"fmt"
"sort"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
var intList = []int{6, 42, 45, 81, 85, 42, 40, 57, 8, 1}
var floatList = []float64{10.9, 8.7, 6.54, 26.89, 3.21, 0.98, 16.58, 3.14159, 88.53, 2.236, 1.0}
var stringList = []string{"HA", "mmo0", "shSEpJ", "4C", "DKaHg", "B", "KI", "G", "Pnf", "2k8eQ"}
var persons = []Person{{"zeng qiang", 28}, {"xiao ming", 18}, {"yu wei", 36}}
func main() {
//-----------------int数组-----------------
fmt.Printf("--------int数组--------\n")
sort.Ints(intList) // 升序
fmt.Printf("intList asc %v\n", intList)
// 判断
keyword1 := 99
index := sort.SearchInts(intList, keyword1) // 二分法查找元素(仅升序)
if index < len(intList) && intList[index] == keyword1 {
fmt.Println(keyword1, "in", index)
} else {
fmt.Println(keyword1, "不存在")
}
sort.Sort(sort.Reverse(sort.IntSlice(intList))) // 整型(int)降序
fmt.Printf("intList desc %v\n", intList)
fmt.Printf("--------int数组--------\n\n")
//-----------------int数组-----------------
fmt.Printf("--------string数组--------\n")
sort.Sort(sort.Reverse(sort.StringSlice(stringList))) // 字符串降序
fmt.Println("stringList desc", stringList)
sort.Strings(stringList) // 字符串升序
fmt.Println("stringList asc", stringList)
keyword2 := "4C"
index = sort.SearchStrings(stringList, keyword2) // 二分法查找元素(仅升序)
if index < len(stringList) && stringList[index] == keyword2 {
fmt.Println(keyword2, "in", index)
} else {
fmt.Println(keyword2, "不存在")
}
sort.SliceStable(stringList, func(i, j int) bool { // 按字符串最后一个字符升序
return stringList[i][len(stringList[i])-1] < stringList[j][len(stringList[j])-1]
})
fmt.Printf("%v\n", stringList)
fmt.Printf("--------string数组--------\n\n")
//-----------------浮点数组-----------------
fmt.Printf("--------浮点数数组--------\n")
sort.Float64s(floatList) // 浮点数升序
fmt.Println("floatList asc", floatList)
sort.Sort(sort.Reverse(sort.Float64Slice(floatList))) // 浮点数降序
fmt.Println("floatList desc", floatList)
fmt.Printf("--------浮点数数组--------\n\n")
//-----------------结构体数组-----------------
fmt.Printf("--------结构体数组--------\n")
sort.SliceStable(persons, func(i, j int) bool { // 结构体按年龄升序
return persons[i].Age < persons[j].Age
})
fmt.Println("persons age asc", persons)
age := 28 // 按年龄查询下标
index = sort.Search(len(persons), func(i int) bool { return persons[i].Age >= age }) // 二分查找结构体
if index < len(persons) && persons[index].Age == age {
fmt.Println(age, "in", index)
} else {
fmt.Println(age, "不存在")
}
sort.SliceStable(persons, func(i, j int) bool { // 结构体按名称(字符串)升序
return persons[i].Name < persons[j].Name
})
fmt.Println("persons name asc", persons)
name := "zeng qiang" // 按名字(字符串)查询下标
index = sort.Search(len(persons), func(i int) bool { return persons[i].Name >= name }) // 二分查找结构体
if index < len(persons) && persons[index].Name == name {
fmt.Println(name, "in", index)
} else {
fmt.Println(name, "不存在")
}
fmt.Printf("--------结构体数组--------\n")
}
```