又是程式設計師小灰的漫畫,關於二分查詢的,我寫了個簡單的實現。
不過實際寫**的過程中並不一帆風順,有些特殊情況還是沒有考慮到。
下面是原始碼:
var (
errnotfound = errors.new("not found target")
)func binarysearch(data int, target int) (int,error)
start := 0
end := dataamount-1
testindex := (start+end)/2
for else if data[testindex] < target else
if start == end
if end == start+1
if target == data[start]
break
} }return 0,errnotfound
}
下面是測試用例:
func testbinarysearch(t *testing.t) , 1,0,nil},
, 2,1,nil},
, 3,2,nil},
, 4,3,nil},
, 5,4,nil},
, 6,5,nil},
, 7,6,nil},
, 8,7,nil},
, 9,8,nil},
, 1,0,nil},
, 2,1,nil},
, 3,2,nil},
, 4,3,nil},
, 3, 0, errnotfound},
, 3, 0, errnotfound},
, 1, 0, nil},
} for i, testcase := range testcases
}}
Golang實現二分查詢
二分查詢是一種演算法,其輸入是乙個有序的元素列表。若要查詢的元素包含在列表中,二分查詢返回其位置,否則返回null。比如猜數字,從任意位置開始,反饋不是對或者不對,而是提示大還是小,根據提示逐步縮小猜測範圍。對同乙個查詢物件進行查詢時,簡單查詢最多需要n步,而二分查詢最多隻需要log 2n log ...
Golang實現二分查詢
二分查詢的思想 拿到有序陣列的首尾下標,然後取中間值跟需要查詢的值對比,如果中間值等於查詢值則返回下標,如果中間值大於查詢值則繼續查詢左邊區塊,如果中間值小於查詢值則繼續查詢左邊區塊,如果查詢不到則返回 1,查詢結束。package main import fmt func binarysearch...
Golang實現二分查詢法
二分查詢法就是實現在一組有序的數字陣列集合中最快找到指定元素的下標 思路 先找到中間的下標middle leftindex rightindex 2 然後讓中間的下標值和findval比較 a 如果arr middle findval,那麼就向leftindex midlle 1 區間找 b 如果a...