设为首页 加入收藏

TOP

Golang二分查找算法的简单实现
2014-11-24 01:40:31 来源: 作者: 【 】 浏览:1
Tags:Golang 二分 查找 算法 简单 实现

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
}
}


相关阅读:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Golang中slice切片的修改操作 下一篇Golang 单例模式 singleton patte..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: