使用插值搜尋在陣列中搜索項的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

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告