当我们写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次;