使用 Go 语言对自定义结构体切片进行二分查找的程序
在这篇 Go 语言文章中,我们将使用迭代和递归方法对自定义结构体切片进行二分查找。二分查找是一种搜索算法,用于在已排序的元素序列中查找特定值的所在位置。
算法
步骤 1 − 首先,我们需要导入 fmt 包。
步骤 2 − 创建一个自定义的 Person 结构体,其中包含字符串类型的 name 和整型类型的 age。
步骤 3 − 现在,创建一个 bSearch() 函数,用于对 Person 结构体切片进行二分查找。
步骤 4 − 它将 low 和 high 变量分别初始化为切片的开头和结尾,然后循环持续执行,直到 low 小于或等于 high。
步骤 5 − 在每次循环迭代中,它计算 low 和 high 之间的中间点,并将该索引处的 Person 的 name 字段与 key 进行比较。
步骤 6 − 如果 name 字段等于 key,则函数返回索引。如果 name 字段小于 key,则将 low 更新为 mid + 1。否则,将 high 更新为 mid - 1。
步骤 7 − 启动 main() 函数。在 main() 函数内部,创建一个 Person 结构体切片和一个要搜索的 key。
步骤 8 − 现在,调用 bSearch() 函数并将结构体和 key 作为参数传递给它。
步骤 9 − 将结果消息打印到控制台。如果函数返回 -1,则返回 false,否则返回 true。
示例 1
在本例中,我们将定义一个 bSearch() 函数,用于使用迭代方法对自定义结构体切片进行二分查找。
package main
import "fmt"
type Person struct {
name string
age int
}
func bSearch(people []Person, key string) int {
l := 0
h := len(people) - 1
for l <= h {
mid := (l + h) / 2
if people[mid].name == key {
return mid
} else if people[mid].name < key {
l = mid + 1
} else {
h = mid - 1
}
}
return -1
}
func main() {
people := []Person{
{"Amy", 15},
{"Bix", 20},
{"Jim", 25},
{"Ross", 40},
{"Siri", 45},
}
key := "Siri"
i := bSearch(people, key)
if i == -1 {
fmt.Printf("%s not found\n", key)
} else {
fmt.Printf("%s found at index %d\n", key, i)
}
}
输出
Siri found at index 4
示例 2
在本例中,我们将定义一个 bSearch() 函数,用于使用递归方法对自定义结构体切片进行二分查找。
package main
import "fmt"
type Person struct {
Name string
Age int
}
func bSearch(people []Person, target Person, low int, high int) int {
if low > high {
return -1
}
mid := (low + high) / 2
if people[mid] == target {
return mid
} else if people[mid].Age < target.Age {
return bSearch(people, target, mid+1, high)
} else {
return bSearch(people, target, low, mid-1)
}
}
func main() {
people := []Person{
{"Angel", 10},
{"Carie", 12},
{"Simona", 15},
{"John", 17},
{"Sam", 20},
}
target := Person{"John", 17}
index := bSearch(people, target, 0, len(people)-1)
if index != -1 {
fmt.Printf("%s found at index %d\n", target.Name, index)
} else {
fmt.Printf("%s not found\n", target.Name)
}
}
输出
John found at index 3
结论
我们已经成功编译并执行了一个 Go 语言程序,该程序使用迭代和递归方法对自定义结构体切片进行二分查找,并附带两个示例。在第一个示例中,我们使用了迭代方法,在第二个示例中,我们使用了递归方法。
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP