使用插值搜索在数组中搜索项的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

结论

在上述教程中,我们使用了两种方法在数组中搜索元素。在第一种方法中,我们使用了主函数,在该函数中,我们使用二分查找的改进版本搜索元素。在第二种方法中,我们使用了一个外部函数,并将数组和要搜索的项目作为参数传入。因此,所有方法都成功执行。

更新于:2023年2月13日

浏览量:214

启动您的职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.