Golang實現二分查詢法

2022-03-23 00:08:25 字數 1132 閱讀 2738

二分查詢法就是實現在一組有序的數字陣列集合中最快找到指定元素的下標

思路①先找到中間的下標middle = (leftindex + rightindex) /2 ,然後讓中間的下標值和findval比較

a:如果arr[middle] > findval,那麼就向leftindex~(midlle - 1)區間找

b:如果arr[middle] < findval,那麼就向middle + 1 ~rightindex區間找

c:如果arr[middle] == findval,那麼直接返回

②從①的a、b、c遞迴執行,知道找到位置

③如果leftindex > rightindex,則表示找不到,退出

**/舉例

假設說我要查詢30這個值,如果按照迴圈的查詢方法,找到30這個值要執行7次。那麼如果是按照二分查詢呢?好吧,二分查詢的過程如下:

1. left = 1, right = 18; mid = (1+18)/2 = 9; 51 > 30

2. left = 1, right = mid - 1 = 8; mid = (1+8)/2 = 4; 15 < 30

3. left = mid + 1 = 5, right = 8; mid = (5+8)/2 = 6; 30 = 30 查詢完畢

只需要執行3次,大大減少了執行時間

//

**package main

import (

"fmt")

//二分查詢函式

//假設有序陣列的順序是從小到大(很關鍵,決定左右方向)

func binaryfind(arr *int, leftindex int , rightindex int, findval int

)

//先找到中間的下標

middle := (leftindex + rightindex) / 2

if (*arr)[middle] >findval

else

if (*arr)[middle] else

}func main()

binaryfind(&arr, 0, len(arr) - 1, 30)}

找到了,下標是6

Golang實現二分查詢

二分查詢是一種演算法,其輸入是乙個有序的元素列表。若要查詢的元素包含在列表中,二分查詢返回其位置,否則返回null。比如猜數字,從任意位置開始,反饋不是對或者不對,而是提示大還是小,根據提示逐步縮小猜測範圍。對同乙個查詢物件進行查詢時,簡單查詢最多需要n步,而二分查詢最多隻需要log 2n log ...

Golang實現二分查詢

二分查詢的思想 拿到有序陣列的首尾下標,然後取中間值跟需要查詢的值對比,如果中間值等於查詢值則返回下標,如果中間值大於查詢值則繼續查詢左邊區塊,如果中間值小於查詢值則繼續查詢左邊區塊,如果查詢不到則返回 1,查詢結束。package main import fmt func binarysearch...

Golang 查詢 二分法查詢

golang 查詢 介紹 在 golang 中,我們常用的查詢有兩種 1 順序查詢 2 二分查詢 該陣列是有序 案例演示 1 有乙個數列 白眉鷹王 金毛獅王 紫衫龍王 青翼蝠王 猜數遊戲 從鍵盤中任意輸入乙個名稱,判斷數列中是否包含此名稱 順序查詢 2 請對乙個有序陣列進行二分查詢 輸入乙個數看看該...