多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### **排序&二分查找** ```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") } ```