Skip to content

Binary Search

Iterative

package main

import "fmt"

func main() {

   // idx := search([]int{1, 2, 3, 4, 5}, 6) //-1
    idx := search([]int{1, 2, 3, 4, 5}, 3) // 2
    fmt.Println(idx)
}

func search(nums []int, target int) int {
    low := 0
    high := len(nums) - 1

    for low <= high {
        mid := (low + high) / 2
        if nums[mid] == target {
            return mid
        } else if nums[mid] < target {
            low = mid + 1
        } else {
            high = mid - 1
        }
    }
    return -1
}

Recursive

package main

import "fmt"

func main() {
    // idx := searchRec([]int{1, 2, 3, 4, 5}, 0, 4, 6) // -1
    idx := searchRec([]int{1, 2, 3, 4, 5}, 0, 4, 3) // 2
    fmt.Println(idx)
}

func searchRec(nums []int, low, high, target int) int {
    if low > high {
        return -1
    }
    mid := (low + high) / 2

    if nums[mid] == target {
        return mid
    } else if nums[mid] < target {
        return searchRec(nums, mid+1, high, target)
    } else {
        return searchRec(nums, low, mid-1, target)
    }
}