二分法是一种快速查找的方法,时间复杂度低,逻辑简单易懂,总的来说就是不断的除以2除以2...
例如需要查找有序list里面的某个关键字key的位置,那么首先确认list的中位数mid,下面分为三种情况:
如果 list[mid] < key,说明key 在中位数的 右边;
如果 list[mid] > key,说明key 在中位数的 左边;
如果 list[mid] = key,说明key 在中位数的中间;
范围每次缩小一半,写个while的死循环知道找到为止。
二分法查找非常快且非常常用,但是唯一要求是要求数组是有序的
代码如下
1 #!/usr/bin/python2.7
2 #-*- coding: utf-8 -*-
3
4 defBinarySearch(lista, key):5 #记录数组的最高位和最低位
6 min =07 max = len(lista) - 1
8
9 if key inlista:10 #建立一个死循环,直到找到key
11 whileTrue:12 #得到中位数
13 mid = (min + max) / 2
14 #key在数组左边
15 if lista[mid] >key:16 max = mid - 1
17 #key在数组右边
18 elif lista[mid]