二分法通過對摺的方式查詢一個資料,條件是必須是一個有序的陣列。陣列底層是順序連結串列,可以隨機獲取一個值O(1).
func main() {
s := []int{1,2}
res := BinarySearch(1,s)
fmt.Println(res)
}
func BinarySearch(target int, s []int) int{
len := len(s)
if len < 2 {
if s[0] == target {
return 0
}else{
return -1
}
}
l, r := 0, len-1
mid := (len-1)/2
for {
if s[mid] == target {
return mid
}else if s[mid] > target { //在左邊
r = mid-1
}else{
l = mid+1
}
mid = l+(r-l)/2 //這個是關鍵,overflow
}
return -1
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結