使用插值搜索在数组中搜索项的Go语言程序
在本教程中,我们将学习如何使用插值搜索在数组中搜索项目。它与二分查找非常相似,但它是二分查找的改进版本,在这个算法中,使用不同的方法在已排序的数组中搜索元素以查找中间元素,并且使用Go语言中的print函数打印输出。让我们来看一下以了解它 -
在主方法中使用插值搜索
在这种方法中,我们将学习如何使用插值搜索方法在数组中搜索元素。所有操作都将在主程序中执行,并且输出将使用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()函数执行。
示例
在主方法中使用插值搜索的Go语言程序,用于在数组中搜索项目
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 - 创建一个名为main的包,并在程序中导入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函数中调用用户定义的函数,并传入一些参数。
示例
在辅助函数中使用插值搜索的Go语言程序,用于在数组中搜索项目
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
结论
在上述教程中,我们使用了两种方法在数组中搜索元素。在第一种方法中,我们使用了主函数,在该函数中,我们使用二分查找的改进版本搜索元素。在第二种方法中,我们使用了一个外部函数,并将数组和要搜索的项目作为参数传入。因此,所有方法都成功执行。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP