使用 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