package main
import "fmt"
var arrs = []int{1,2,4,6,8,8,10}
func main () {
fmt.Printf("before arr: %v\n", arrs)
up_equal := binary_search_up_equal(arrs, 8)
fmt.Printf("the index of element which first ge %d is %d\n", 8, up_equal)
up := binary_search_up(arrs, 8)
fmt.Println(up)
down_equal := binary_search_down_equal(arrs, 8)
fmt.Println(down_equal)
down := binary_search_down(arrs, 8)
fmt.Println(down)
}
func binary_search_up_equal(arrs []int, target int) int {
l, r := 0, len(arrs) - 1
for l < r {
mid := (l+r) / 2
if arrs[mid] < target {
l = mid + 1
} else {
r = mid
}
}
return l
}
func binary_search_up(arrs []int, target int) int {
l, r := 0, len(arrs) - 1
for l < r {
mid := (l+r) / 2
if arrs[mid] <= target {
l = mid + 1
} else {
r = mid
}
}
return l
}
func binary_search_down_equal(arrs []int, target int) int {
l, r := 0, len(arrs) - 1
for l < r {
mid := (l+r+1) / 2
fmt.Printf("mid is: %d\n", mid)
if arrs[mid] > target {
r = mid - 1
} else {
l = mid
}
}
return l
}
func binary_search_down(arrs []int, target int) int {
l, r := 0, len(arrs) - 1
for l < r {
mid := (l+r+1) / 2
fmt.Printf("mid is: %d\n", mid)
if arrs[mid] >= target {
r = mid - 1
} else {
l = mid
}
}
return l
}