• 注册
当前位置:1313e > 默认分类 >正文

Go-实现二分查找算法

 算法描述:

        在一组有序的,并能支持随机访问的数组中,将数组一分为二,将要查询的元素和分割点进行比较,时间复杂度为O(lgn)

有以下三种情况:

  • 相等直接返回
  • 元素大于分割点,在分割点右侧继续查找
  • 元素小于分割点,在分割点左侧继续查找

相关变形如下:

  • 查找第一个值等于给定的,在相等的时候做处理,向前查
  • 查找最后一个值等于给定的值,在相等的时候做处理,向后查
  • 查找第一个大于等于给定的值,判断边界减1
  • 查找最后一个小于等于给定的值,判断边界加1

代码片段如下:

package mainfunc BinarySearch(ary []int, findData int) int {small, big := 0, len(ary)-1for small <= big {currNum := (small + big) / 2if ary[currNum] > findData {big = currNum - 1} else if ary[currNum] < findData {small = currNum + 1} else {return currNum}}return -1
}

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录