使用插值搜尋在陣列中搜索項的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
結論
在上述教程中,我們使用了兩種方法在陣列中搜索元素。在第一種方法中,我們使用了主函式,在該函式中,我們使用二分查詢的改進版本搜尋元素。在第二種方法中,我們使用了一個外部函式,並將陣列和要搜尋的專案作為引數傳入。因此,所有方法都成功執行。