Golang二分查找算法的简单实现

package main
      
import (
    "fmt"
)
      
type Searchable interface {
    Len() int
    Less(int,int) bool
    Equal(int,interface{}) bool
}
      
type List []int
      
func (l List) Len() int {
    return len(l)
}
      
func (l List) Less(first int,second int) bool {
    if l[first] < l[second] {
        return true
    }
      
    return false
}
    
func (l List) Equal(index int,item interface{}) bool {
    if value,ok := item.(int); ok {
        if l[index] == value {
            return true
        }
    }
      
    return false
}
       
func main() {
    list := []int{1,2,3,5,9}
      
    index := binSearch(list,3)
    fmt.Printf("The index of 3 in the list is %d\n",index)
      
    index = binSearch(list,4)
    fmt.Printf("The index of 4 in the list is %d\n",index)
}
       
func binSearch(list List,item interface{}) int {
    startFlag := 0
    stopFlag := list.Len() - 1
    middleFlag := (startFlag + stopFlag) / 2
       
    for (!list.Equal(middleFlag,item)) && (startFlag < stopFlag) {
        if list.Less(startFlag,stopFlag) {
            startFlag = middleFlag + 1
        } else {
            stopFlag = middleFlag - 1
        }
        middleFlag = (startFlag + stopFlag) / 2
    }
       
    if list.Equal(middleFlag,item) {
        return middleFlag
    } else {
        return -1
    }
}

相关文章

程序目录结构 简单实现,用户登录后返回一个jwt的token,下次请求带上token请求用户信息接口并返回信息...
本篇博客的主要内容是用go写一个简单的Proof-of-Work共识机制,不涉及到网络通信环节,只是一个本地的简...
简介 默克尔树(MerkleTree)是一种典型的二叉树结构,其主要特点为: 最下面的叶节点包含存储数据或其...
接下来学习并发编程, 并发编程是go语言最有特色的地方, go对并发编程是原生支持. goroutine是go中最近本...
先普及一下, 什么是广度优先搜索 广度优先搜索类似于树的层次遍历。从图中的某一顶点出发,遍历每一个顶...
第一天: 接口的定义和实现 第二天: 一. go语言是面向接口编程. 在学习继承的时候说过, go语言只有封装,...