算法概述
当数据量很大时适宜采用二分法查找,其是一种效率较高的查找方法,但前提条件是要查找的集合必须是有序的,或是升序排列或是降序排列都可以。二分法又称折半查找,故名思意就是就是从中间开始比较查找,其基本思路是:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功;若 x 小于当前位置值,则在数列的前半段中查找;若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止。所以二分法查找的速度比较快,次数比较少,性能比较好;因此相对来说其删除和插入操作就不是那么灵活了。
二分查找的优点和缺点
虽然二分查找的效率高,但是要将表按关键字排序。而排序本身是一种很费时的运算。既使采用高效率的排序方法也要花费O(nlgn)的时间。
二分查找只适用顺序存储结构。为保持表的有序性,在顺序结构里插入和删除都必须移动大量的结点。因此,二分查找特别适用于那种一经建立就很少改动、而又经常需要查找的线性表。
对那些查找少而又经常需要改动的线性表,可采用链表作存储结构,进行顺序查找。链表上无法实现二分查找。
def search(v,l):
i=0
j=len(l)-1
while i!=j+1:
m=(i+j)//2
if l[m] i=m+1 else: j=m-1 if 0<=i return i else: return -1 l=[2,3,4,5,6,7,8,9,10,12,14,67,89,2324] search(5,l)