查找算法—折半查找算法分析与实现(Python)
2015-12-20 14:07
771 查看
December 20, 2015 2:01 PM
折半查找是我很喜欢的一种查找方式,它代码简单,查询效率很高,时间复杂度是0(log2n).
折半查找是在一个有序的元组中查找元素,它通过关键词与中间值的比较,来查找相关的元素。如果关键词比中间值大,那么就在元组的后半部分查找,反之亦然。下面先贴出其代码的实现
运行结果:
好了,其实,折半查找也是有它的缺点的,从上面的例子可以看出,在元组{1,2,3,3,3,4,5,6}中,查找元素3时,只是输出了第一次找到的结果,另外折半查找要求元组的元素是有序的,查找的结果才是正确的。不过总的来说,折半查找还是一种性能卓越的查找算法。
折半查找是我很喜欢的一种查找方式,它代码简单,查询效率很高,时间复杂度是0(log2n).
折半查找是在一个有序的元组中查找元素,它通过关键词与中间值的比较,来查找相关的元素。如果关键词比中间值大,那么就在元组的后半部分查找,反之亦然。下面先贴出其代码的实现
[code]#BinarySearch.py #王渊 #2015.12.18 #Email:wyxidian@gmail.com from pylab import * def BinarySearch(data, length, key): #折半查找 low = 0 high = length-1 if(key < data[low] or key>data[high]): #索引超出范围返回错误 print("Error!!! The ", key, " is not in the data!!!") return -1 while(low<=high): #循环查找 mid = low + (high-low)//2 #计算当前分割下标 if(data[mid] > key): #若查找记录小于当前分割记录 high = mid-1 #调整分割记录 elif(data[mid] < key): #若查找记录大于当前分割记录 low = mid+1 else: #若查找记录等于当前分割记录 return mid if(data[mid] != key): #数据key不在查询列表data中返回错误 print("Error!!! The ", key, " is not in the data!!!") return -1 length = 100 data = array(range(length)) key = 59 idx = BinarySearch(data, length, key) print(data) if(idx != -1): print("The ", key, " is the ", idx+1, "th value of the data.")
运行结果:
[code][ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99] The 50 is the 51 th value of the data.
好了,其实,折半查找也是有它的缺点的,从上面的例子可以看出,在元组{1,2,3,3,3,4,5,6}中,查找元素3时,只是输出了第一次找到的结果,另外折半查找要求元组的元素是有序的,查找的结果才是正确的。不过总的来说,折半查找还是一种性能卓越的查找算法。
相关文章推荐
- python中and和or的使用方法
- Python: scikit-image 图像的基本操作
- Python: scikit-image binary descriptor
- 《利用python进行数据分析》第2章数据集的训练
- leetcode Count and Say python
- python的函数
- Python 入门简介(一)
- python "".join() 出错TypeError: sequence item 0: expected string
- python脚本在Windows计划任务执行问题
- Python程序无法在命令行下运行
- windows下python极简安装
- LeetCode Letter Combinations of a Phone Number
- 杂物 python (一)
- python____Django实战(1)
- python简单文本爬虫
- 使用Python实现端口映射
- Python实现端口复用实例代码
- Python学习笔记,内置数据类型。
- python len isalpha 中文小坑
- Python 批量下载xkcd漫画