基础算法篇之二分查找
每日一个算法之二分查找
- 原理介绍
适合二分法查找是需要具备一定前提条件的,第一首先为列表,并且列表里面的元素为有序数列,这是前提条件,有了这些前提条件之后,就可以看下如何来计算
例如如下数组 [1,3,5,7,11,24,45,56,67,78,87,123] ,我们希望能找到11这个数字在数组的所在位置
算法原理是这样的,我们首先计算出这个数组的长度并将最大的数值所在数组的位置命名为最后变量定义end,当然第一个则为数组的开始命名为font,有了开始和最后,我们就可以计算出这个数组的中间值
mid = (font+end)//2.
之后我们比要找的数字与中间值进行比较,如果中间值大于要找的数值则证明数值在数组的前半段,此时,我们需要将end值重新计算,计算后为mid-1
反之当我们中间数据小于要找数值,则证明要找数值在数组的后半段,此时我们需要重新计算font,计算后的font为 mid+1
经过以上反复推算,最终可以定位到要找的数值所在数组的精确位置
2 代码实现
#!/usr/bin/env python # -*- coding:utf-8 -*- # 二分查找 def sortByBinary(item): sortedlist = range(10000) end = len(sortedlist) - 1 font = 0 i = 0 while True: i += 1 mid = (end + font) // 2 if item < sortedlist[mid]: end = mid - 1 elif item > sortedlist[mid]: font = mid + 1 else: print(mid) print("经历的计算次数:%s" % i) return font if __name__ == '__main__': sortByBinary(999)