当我们写c语言代码时要从一组有序的数组中找一个数时
如{1,2,3,4,5,6,7,8,9,10},如果随机查找某个数,正常一个一个找的话最坏的情况为10次,例如用for(i=1;i<=10;I++);循环十次才能找到想要的10.
为了方便,引用一个算法:
同样面对{1,2,3.4,5,6,7,8,9,10};
(1)写出一个数组如果需要套用数组元素个数这个常量,可以用
int sz=sizeof(arr)/sizeof(arr[0]);来求出元素个数;
(2)第一步利用下标先取数组中间数int arr[mid],
即定义初始左下标left=0,int arr[left]=1;
定义初始右下标right=元素个数sz-1,int arr[right]=sz;
mid=(left+right)/2;
进入循环让待取值与mid比较;
此时带判定范围由1-10变成了1-4或者6-10,达到缩小范围的目的;
(3)第二步进入第二次循环重复第一步操作;
规定:若有N个元素,二分查找法最多只需要a=log(N)/log(2)次;
N=10,a=3.321,也就是4次;
N=2^32,a=32,也就是32次;