学习回顾算法(二分法查找)
来源:互联网 发布:罗马人和日耳曼人 知乎 编辑:程序博客网 时间:2024/05/22 06:18
二分法查找概述
二分法查找也称为折半查找,属于有序查找算法。用给定值key先和中间结点的关键字比较,中间结点把线形表分成两个字表,若相等则查找成功;若不相等,再根据key与该中间结点关键字的比较结果确定下一步查找哪个字表,这样递归进行,直到查找到或查找结束发现表中没有这样的结点。
前提条件
列表中元素必须是有序的,如果是无须的则需要进行排序操作。
二分查找示例
假如有一组数为1,3,5,7,9,11,13,15要查找给定值5。设三个变量front、mid、end分别指向数据的上界、中界和下界,mid=(front+end)/2
1、开始领front=0(指向1),end=7(指向15),则mid=3(指向7)。因为mid>key,故应在前半段中查找。
2、新的end=mid-1=2,而front=0不变,则新的mid=1(指向3)。此时key>mid。故确定应在后半段中查找。
3、新fron=mid+1=2,而end=2不变,则新的mid=2,这是key=mid,查找成功。
二分法查找算法分析
时间复杂度:
1、最坏取款查找最后一个元素:T(n) = O(logn)
2、最好的情况,就是要查找的元素在中间。O(1)1,
二分法查找算法实现
1、golang实现
package mainimport ( "fmt")func BinarySearch(values []int, key int) int { if len(values) == 0 { return -1 } front := 0 end := len(values) - 1 mid := (front + end) / 2 for front < end && values[mid] != key { if values[mid] > key { end = mid - 1 } else { front = mid + 1 } mid = (front + end) / 2 } if values[mid] == key { return mid } return -1}func main() { values := []int{1, 3, 5, 7, 9, 11, 13, 15} fmt.Println(values) index := BinarySearch(values, 5) fmt.Println(index) index = BinarySearch(values, 100) fmt.Println(index) return}
结果:
[1 3 5 7 9 11 13 15]2-1
阅读全文
0 0
- 学习回顾算法(二分法查找)
- 算法学习--二分法查找
- 学习回顾算法(顺序查找算法)
- 算法学习之二分法查找
- 二分法查找(折半查找)算法学习笔记
- 二分法查找(折半查找)算法学习笔记
- 算法导论学习日记(5)二分法查找
- 查找算法 - 二分法查找
- 查找算法:二分法查找
- java学习-算法2--二分法查找
- [学习笔记]排序算法之 二分法查找
- 学习回顾算法(插值查找算法)
- 常用算法(冒泡排序、二分法查找)
- 常用算法(冒泡排序、二分法查找)
- C++ 二分法查找操作 算法(4)
- C++ 二分法查找算法
- C++二分法查找算法
- 算法:二分法查找
- Android 开发笔记 5:Android 内核下载、编译与调试
- idea快捷键,附带和eclipse对比
- 「机器学习」和「深度学习」的 Cheat Sheets Helperhaps
- 基础练习 数列特征
- 设计模式——单例模式
- 学习回顾算法(二分法查找)
- iOS中(以#开头)十六进制的颜色转换为UIColor(RGB)
- js图片查看器
- Linux C Socket编程发送结构体、文件详解及实例
- 怎么用IDEA上传本地项目到码云/Github?
- kotlin开发Android入门篇一
- 解析字符串形式的url地址
- Ubuntu下Django+uwsgi+nginx项目部署
- error和exception