Go二分查找

package main

import "fmt"

func main() {
    data := []int{1,2,3,4,5,8,10}
    fmt.Println(binFind(data,8))
    fmt.Println(binFind(data,9))
}

func binFind(data []int, item int) int {
    if len(data) == 0 {
        return -1
    }
    i, j := 0, len(data)-1  // 双指针,注意j的值为末尾下标,不是长度
    for {
        mid := (i+j)/2      // 此处需要向下取整,Go默认。其他语言需要注意
        if item == data[mid] {
            return mid
        }
        if item < data[mid] {
            j = mid-1		// 注意让出边界值
        } else { 
            i = mid+1       // 注意让出边界值
        }
        if i > j {			// 不能用i>=j
            break
        }
    }
    return -1
}
发布了162 篇原创文章 · 获赞 131 · 访问量 83万+

猜你喜欢

转载自blog.csdn.net/u013474436/article/details/105138789