1.查找算法
本章我们会介绍一些常见的算法,代码均用golang编写,读者可自行参考使用
1.1 顺序查找
顺序查找最为简单,写一个for循环即可
时间复杂度:O(n)
//Test example
//func main() {
//
// s := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
// v := 5
//
// result := BLC.SequentialSearch(s, v)
// if result != -1 {
// fmt.Println(result)
// } else {
// fmt.Println("未找到:", v)
// }
//}
func SequentialSearch(s []int, value int) int {
for index, v := range s {
if v == value {
return index
}
}
return -1
}
1.2 二分查找
二分查找的意思就是先对查找序列排序,然后取中间值比较,这样就可以排除一半了,以此类推,直到查完整个序列
时间复杂度: O(lgn)
//Test example
//func main() {
// s := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
// v := 5
//
// result := BinarySearch(s, v)
// if result != -1 {
// fmt.Println(result)
// } else {
// fmt.Println("未找到:", v)
// }
//}
func BinarySearch(s []int, val int) int {
left := 0
right := len(s) - 1
for left <= right {
mid := (left + right) / 2
if s[mid] == val {
return mid
break
} else if s[mid] > val {
right = mid - 1
} else {
left = mid + 1
}
}
return -1
}
二分法的效率要比顺序查找高,读者可以测试一下程序耗时(除了个例)
|