Golang 使用插值搜索在数组中搜索项目
在本教程中,我们将看到如何使用插值搜索在数组中搜索项目。它与二分搜索非常相似,但是是其改进版本,在这个算法中,使用不同的方法从排序的数组中搜索元素,并使用Golang的打印函数打印输出结果。让我们看一下来理解它 –
在main方法中使用插值搜索
在这种方法中,我们将学习如何使用插值搜索方法在数组中搜索元素。所有的操作将在主程序中执行,并使用fmt.Println()函数打印输出结果。
步骤
步骤1 - 创建一个包main并在程序中导入fmt包。
步骤2 - 创建一个main函数,并在其中进一步创建变量flag,start,end和middle,并将它们初始化为零。
步骤3 - 创建一个数组并用相应的元素填充它,还创建一个名为item的变量,该变量将在数组中进行搜索。
步骤4 - 将start设置为零,将end设置为len(arr)-1,并使用代码中建议的方式找到中间元素。
步骤5 - 运行一个循环,其中start<=end,并检查计算上述中间元素的数组是否小于item,如果是,则start = middle+1。
步骤6 - 如果中间数组元素等于item,则将flag设置为中间索引,并中断循环。
步骤7 - 如果没有满足的条件,则将end = middle-1,并重新计算中间索引。
步骤8 - 循环终止后,检查flag是否不等于零,如果是,则打印该项目在数组中存在。
步骤9 - 如果flag不为零,则打印该项目不在数组中。打印语句使用fmt.Println()函数执行。
示例
在main方法中使用插值搜索在数组中搜索项目的Golang程序
package main
import "fmt"
func main() {
var flag int = 0
var start int = 0
var end int = 0
var middle int = 0
arr := []int{10, 20, 30, 40, 50}
fmt.Println("The respective array elements are:", arr)
var item int = 40
fmt.Println("The value to be searched is:", item)
start = 0
end = 4
middle = start + (((end - start) / (arr[end] - arr[start])) * (item - arr[start]))
for start := 0; start <= end; {
if arr[middle] < item {
start = middle + 1
} else if arr[middle] == item {
flag = middle
break
} else {
end = middle - 1
}
middle = start + (((end - start) / (arr[end] - arr[start])) * (item - arr[start]))
}
if flag != 0 {
fmt.Println("Item", item, "is found at index:", flag, "in the array")
} else {
fmt.Println("Item", item, "not found in the array")
}
}
输出
The respective array elements are: [10 20 30 40 50]
The value to be searched is: 40
Item 40 is found at index: 3 in the array
在辅助函数中使用插值搜索
在这种方法中,我们将看到如何使用辅助函数在数组中搜索元素,参数为数组和要搜索的项。让我们深入代码,了解如何解决这个问题。
步骤
步骤1 - 创建一个主要的包,并在程序中导入fmt包。
步骤2 - 创建一个名为search的函数,并将数组和要搜索的项作为参数,进一步在其中创建变量flag、start、end和middle,并将它们初始化为零。
步骤3 - 将start设置为零,将end设置为len(arr)-1,并使用代码中建议的方法找到中间元素。
步骤4 - 运行一个循环,其中start<=end,并检查计算出的数组中间元素是否小于item,如果是,则执行start = middle+1。
步骤5 - 如果中间数组元素等于item,则设置flag为中间索引,并中断循环。
步骤6 - 如果没有一个条件满足,将end设置为middle-1,并重新计算中间索引。
步骤7 - 循环结束后,检查如果flag不等于零,则打印数组中存在该项。
步骤8 - 如果flag不等于零,则打印数组中不存在该项。使用fmt.Println()函数执行打印语句。
步骤9 - 从main函数调用用户定义的函数,并传入一些参数。
示例
Golang程序,在辅助函数中使用插值搜索在数组中搜索项。
package main
import "fmt"
func search(arr []int, item int) {
var flag int = 0
var start int = 0
var end int = 0
var middle int = 0
start = 0
end = 4
middle = start + (((end - start) / (arr[end] - arr[start])) * (item - arr[start]))
for start := 0; start <= end; {
if arr[middle] < item {
start = middle + 1
} else if arr[middle] == item {
flag = middle
break
} else {
end = middle - 1
}
middle = start + (((end - start) / (arr[end] - arr[start])) * (item - arr[start]))
}
if flag != 0 {
fmt.Println("Item", item, "is found at index:", flag, "in the array")
} else {
fmt.Println("Item", item, "not found in the array")
}
}
func main() {
arr := []int{10, 20, 30, 40, 50}
fmt.Println("The respective array elements are:", arr)
var item int = 40
fmt.Println("The value to be searched is:", item)
search(arr, item)
}
输出
The respective array elements are: [10 20 30 40 50]
The value to be searched is: 40
Item 40 is found at index: 3 in the array
结论
在上述教程中,我们使用了两种方法来在数组中搜索元素。在第一种方法中,我们使用了主函数,在其中使用了改进版二分搜索来搜索元素。在第二种方法中,我们使用了一个外部函数数组和待搜索的元素作为参数。因此,所有方法都成功执行。