資料結構演算法-go 實現二分法

littlexiaoshuishui發表於2020-06-12

二分法通過對摺的方式查詢一個資料,條件是必須是一個有序的陣列。陣列底層是順序連結串列,可以隨機獲取一個值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 協議》,轉載必須註明作者和本文連結

相關文章